diff --git a/.coveragerc b/.coveragerc index 1d4505e..9ac74e8 100644 --- a/.coveragerc +++ b/.coveragerc @@ -10,8 +10,3 @@ exclude_lines = pragma: NO COVER # Ignore debug-only repr def __repr__ - # Ignore pkg_resources exceptions. - # This is added at the module level as a safeguard for if someone - # generates the code and tries to run it without pip installing. This - # makes it virtually impossible to test properly. - except pkg_resources.DistributionNotFound diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml index 3815c98..fccaa8e 100644 --- a/.github/.OwlBot.lock.yaml +++ b/.github/.OwlBot.lock.yaml @@ -13,4 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:7a40313731a7cb1454eef6b33d3446ebb121836738dc3ab3d2d3ded5268c35b6 + digest: sha256:3bf87e47c2173d7eed42714589dc4da2c07c3268610f1e47f8e1a30decbfc7f1 diff --git a/.github/release-please.yml b/.github/release-please.yml index 6def37a..e9a4f00 100644 --- a/.github/release-please.yml +++ b/.github/release-please.yml @@ -1,5 +1,6 @@ releaseType: python handleGHRelease: true +manifest: true # NOTE: this section is generated by synthtool.languages.python # See https://github.com/googleapis/synthtool/blob/master/synthtool/languages/python.py branches: diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 7092a13..e97d89e 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -12,7 +12,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v4 with: - python-version: "3.10" + python-version: "3.9" - name: Install nox run: | python -m pip install --upgrade setuptools pip wheel @@ -28,7 +28,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v4 with: - python-version: "3.10" + python-version: "3.9" - 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 d2aee5b..16d5a9e 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -12,7 +12,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v4 with: - python-version: "3.10" + python-version: "3.8" - name: Install nox run: | python -m pip install --upgrade setuptools pip wheel diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index 87ade4d..23000c0 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -41,7 +41,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v4 with: - python-version: "3.10" + python-version: "3.8" - name: Install coverage run: | python -m pip install --upgrade setuptools pip wheel diff --git a/.kokoro/docker/docs/Dockerfile b/.kokoro/docker/docs/Dockerfile index 238b87b..f8137d0 100644 --- a/.kokoro/docker/docs/Dockerfile +++ b/.kokoro/docker/docs/Dockerfile @@ -60,16 +60,16 @@ RUN apt-get update \ && rm -rf /var/lib/apt/lists/* \ && rm -f /var/cache/apt/archives/*.deb -###################### Install python 3.8.11 +###################### Install python 3.9.13 -# Download python 3.8.11 -RUN wget https://www.python.org/ftp/python/3.8.11/Python-3.8.11.tgz +# Download python 3.9.13 +RUN wget https://www.python.org/ftp/python/3.9.13/Python-3.9.13.tgz # Extract files -RUN tar -xvf Python-3.8.11.tgz +RUN tar -xvf Python-3.9.13.tgz -# Install python 3.8.11 -RUN ./Python-3.8.11/configure --enable-optimizations +# Install python 3.9.13 +RUN ./Python-3.9.13/configure --enable-optimizations RUN make altinstall ###################### Install pip diff --git a/.kokoro/requirements.in b/.kokoro/requirements.in index 7718391..cbd7e77 100644 --- a/.kokoro/requirements.in +++ b/.kokoro/requirements.in @@ -5,4 +5,6 @@ typing-extensions twine wheel setuptools -nox \ No newline at end of file +nox +charset-normalizer<3 +click<8.1.0 diff --git a/.kokoro/requirements.txt b/.kokoro/requirements.txt index d15994b..05dc467 100644 --- a/.kokoro/requirements.txt +++ b/.kokoro/requirements.txt @@ -20,9 +20,9 @@ cachetools==5.2.0 \ --hash=sha256:6a94c6402995a99c3970cc7e4884bb60b4a8639938157eeed436098bf9831757 \ --hash=sha256:f9f17d2aec496a9aa6b76f53e3b614c965223c061982d434d160f930c698a9db # via google-auth -certifi==2022.6.15 \ - --hash=sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d \ - --hash=sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412 +certifi==2022.12.7 \ + --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ + --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 # via requests cffi==1.15.1 \ --hash=sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5 \ @@ -93,11 +93,14 @@ cffi==1.15.1 \ charset-normalizer==2.1.1 \ --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f - # via requests + # via + # -r requirements.in + # requests click==8.0.4 \ --hash=sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1 \ --hash=sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb # via + # -r requirements.in # gcp-docuploader # gcp-releasetool colorlog==6.7.0 \ @@ -110,29 +113,33 @@ commonmark==0.9.1 \ --hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60 \ --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9 # via rich -cryptography==37.0.4 \ - --hash=sha256:190f82f3e87033821828f60787cfa42bff98404483577b591429ed99bed39d59 \ - --hash=sha256:2be53f9f5505673eeda5f2736bea736c40f051a739bfae2f92d18aed1eb54596 \ - --hash=sha256:30788e070800fec9bbcf9faa71ea6d8068f5136f60029759fd8c3efec3c9dcb3 \ - --hash=sha256:3d41b965b3380f10e4611dbae366f6dc3cefc7c9ac4e8842a806b9672ae9add5 \ - --hash=sha256:4c590ec31550a724ef893c50f9a97a0c14e9c851c85621c5650d699a7b88f7ab \ - --hash=sha256:549153378611c0cca1042f20fd9c5030d37a72f634c9326e225c9f666d472884 \ - --hash=sha256:63f9c17c0e2474ccbebc9302ce2f07b55b3b3fcb211ded18a42d5764f5c10a82 \ - --hash=sha256:6bc95ed67b6741b2607298f9ea4932ff157e570ef456ef7ff0ef4884a134cc4b \ - --hash=sha256:7099a8d55cd49b737ffc99c17de504f2257e3787e02abe6d1a6d136574873441 \ - --hash=sha256:75976c217f10d48a8b5a8de3d70c454c249e4b91851f6838a4e48b8f41eb71aa \ - --hash=sha256:7bc997818309f56c0038a33b8da5c0bfbb3f1f067f315f9abd6fc07ad359398d \ - --hash=sha256:80f49023dd13ba35f7c34072fa17f604d2f19bf0989f292cedf7ab5770b87a0b \ - --hash=sha256:91ce48d35f4e3d3f1d83e29ef4a9267246e6a3be51864a5b7d2247d5086fa99a \ - --hash=sha256:a958c52505c8adf0d3822703078580d2c0456dd1d27fabfb6f76fe63d2971cd6 \ - --hash=sha256:b62439d7cd1222f3da897e9a9fe53bbf5c104fff4d60893ad1355d4c14a24157 \ - --hash=sha256:b7f8dd0d4c1f21759695c05a5ec8536c12f31611541f8904083f3dc582604280 \ - --hash=sha256:d204833f3c8a33bbe11eda63a54b1aad7aa7456ed769a982f21ec599ba5fa282 \ - --hash=sha256:e007f052ed10cc316df59bc90fbb7ff7950d7e2919c9757fd42a2b8ecf8a5f67 \ - --hash=sha256:f2dcb0b3b63afb6df7fd94ec6fbddac81b5492513f7b0436210d390c14d46ee8 \ - --hash=sha256:f721d1885ecae9078c3f6bbe8a88bc0786b6e749bf32ccec1ef2b18929a05046 \ - --hash=sha256:f7a6de3e98771e183645181b3627e2563dcde3ce94a9e42a3f427d2255190327 \ - --hash=sha256:f8c0a6e9e1dd3eb0414ba320f85da6b0dcbd543126e30fcc546e7372a7fbf3b9 +cryptography==38.0.3 \ + --hash=sha256:068147f32fa662c81aebab95c74679b401b12b57494872886eb5c1139250ec5d \ + --hash=sha256:06fc3cc7b6f6cca87bd56ec80a580c88f1da5306f505876a71c8cfa7050257dd \ + --hash=sha256:25c1d1f19729fb09d42e06b4bf9895212292cb27bb50229f5aa64d039ab29146 \ + --hash=sha256:402852a0aea73833d982cabb6d0c3bb582c15483d29fb7085ef2c42bfa7e38d7 \ + --hash=sha256:4e269dcd9b102c5a3d72be3c45d8ce20377b8076a43cbed6f660a1afe365e436 \ + --hash=sha256:5419a127426084933076132d317911e3c6eb77568a1ce23c3ac1e12d111e61e0 \ + --hash=sha256:554bec92ee7d1e9d10ded2f7e92a5d70c1f74ba9524947c0ba0c850c7b011828 \ + --hash=sha256:5e89468fbd2fcd733b5899333bc54d0d06c80e04cd23d8c6f3e0542358c6060b \ + --hash=sha256:65535bc550b70bd6271984d9863a37741352b4aad6fb1b3344a54e6950249b55 \ + --hash=sha256:6ab9516b85bebe7aa83f309bacc5f44a61eeb90d0b4ec125d2d003ce41932d36 \ + --hash=sha256:6addc3b6d593cd980989261dc1cce38263c76954d758c3c94de51f1e010c9a50 \ + --hash=sha256:728f2694fa743a996d7784a6194da430f197d5c58e2f4e278612b359f455e4a2 \ + --hash=sha256:785e4056b5a8b28f05a533fab69febf5004458e20dad7e2e13a3120d8ecec75a \ + --hash=sha256:78cf5eefac2b52c10398a42765bfa981ce2372cbc0457e6bf9658f41ec3c41d8 \ + --hash=sha256:7f836217000342d448e1c9a342e9163149e45d5b5eca76a30e84503a5a96cab0 \ + --hash=sha256:8d41a46251bf0634e21fac50ffd643216ccecfaf3701a063257fe0b2be1b6548 \ + --hash=sha256:984fe150f350a3c91e84de405fe49e688aa6092b3525f407a18b9646f6612320 \ + --hash=sha256:9b24bcff7853ed18a63cfb0c2b008936a9554af24af2fb146e16d8e1aed75748 \ + --hash=sha256:b1b35d9d3a65542ed2e9d90115dfd16bbc027b3f07ee3304fc83580f26e43249 \ + --hash=sha256:b1b52c9e5f8aa2b802d48bd693190341fae201ea51c7a167d69fc48b60e8a959 \ + --hash=sha256:bbf203f1a814007ce24bd4d51362991d5cb90ba0c177a9c08825f2cc304d871f \ + --hash=sha256:be243c7e2bfcf6cc4cb350c0d5cdf15ca6383bbcb2a8ef51d3c9411a9d4386f0 \ + --hash=sha256:bfbe6ee19615b07a98b1d2287d6a6073f734735b49ee45b11324d85efc4d5cbd \ + --hash=sha256:c46837ea467ed1efea562bbeb543994c2d1f6e800785bd5a2c98bc096f5cb220 \ + --hash=sha256:dfb4f4dd568de1b6af9f4cda334adf7d72cf5bc052516e1b2608b683375dd95c \ + --hash=sha256:ed7b00096790213e09eb11c97cc6e2b757f15f3d2f85833cd2d3ec3fe37c1722 # via # gcp-releasetool # secretstorage @@ -148,23 +155,23 @@ filelock==3.8.0 \ --hash=sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc \ --hash=sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4 # via virtualenv -gcp-docuploader==0.6.3 \ - --hash=sha256:ba8c9d76b3bbac54b0311c503a373b00edc2dc02d6d54ea9507045adb8e870f7 \ - --hash=sha256:c0f5aaa82ce1854a386197e4e359b120ad6d4e57ae2c812fce42219a3288026b +gcp-docuploader==0.6.4 \ + --hash=sha256:01486419e24633af78fd0167db74a2763974765ee8078ca6eb6964d0ebd388af \ + --hash=sha256:70861190c123d907b3b067da896265ead2eeb9263969d6955c9e0bb091b5ccbf # via -r requirements.in -gcp-releasetool==1.8.7 \ - --hash=sha256:3d2a67c9db39322194afb3b427e9cb0476ce8f2a04033695f0aeb63979fc2b37 \ - --hash=sha256:5e4d28f66e90780d77f3ecf1e9155852b0c3b13cbccb08ab07e66b2357c8da8d +gcp-releasetool==1.10.0 \ + --hash=sha256:72a38ca91b59c24f7e699e9227c90cbe4dd71b789383cb0164b088abae294c83 \ + --hash=sha256:8c7c99320208383d4bb2b808c6880eb7a81424afe7cdba3c8d84b25f4f0e097d # via -r requirements.in -google-api-core==2.8.2 \ - --hash=sha256:06f7244c640322b508b125903bb5701bebabce8832f85aba9335ec00b3d02edc \ - --hash=sha256:93c6a91ccac79079ac6bbf8b74ee75db970cc899278b97d53bc012f35908cf50 +google-api-core==2.10.2 \ + --hash=sha256:10c06f7739fe57781f87523375e8e1a3a4674bf6392cd6131a3222182b971320 \ + --hash=sha256:34f24bd1d5f72a8c4519773d99ca6bf080a6c4e041b4e9f024fe230191dda62e # via # google-cloud-core # google-cloud-storage -google-auth==2.11.0 \ - --hash=sha256:be62acaae38d0049c21ca90f27a23847245c9f161ff54ede13af2cb6afecbac9 \ - --hash=sha256:ed65ecf9f681832298e29328e1ef0a3676e3732b2e56f41532d45f70a22de0fb +google-auth==2.14.1 \ + --hash=sha256:ccaa901f31ad5cbb562615eb8b664b3dd0bf5404a67618e642307f00613eda4d \ + --hash=sha256:f5d8701633bebc12e0deea4df8abd8aff31c28b355360597f7f2ee60f2e4d016 # via # gcp-releasetool # google-api-core @@ -174,76 +181,102 @@ google-cloud-core==2.3.2 \ --hash=sha256:8417acf6466be2fa85123441696c4badda48db314c607cf1e5d543fa8bdc22fe \ --hash=sha256:b9529ee7047fd8d4bf4a2182de619154240df17fbe60ead399078c1ae152af9a # via google-cloud-storage -google-cloud-storage==2.5.0 \ - --hash=sha256:19a26c66c317ce542cea0830b7e787e8dac2588b6bfa4d3fd3b871ba16305ab0 \ - --hash=sha256:382f34b91de2212e3c2e7b40ec079d27ee2e3dbbae99b75b1bcd8c63063ce235 +google-cloud-storage==2.6.0 \ + --hash=sha256:104ca28ae61243b637f2f01455cc8a05e8f15a2a18ced96cb587241cdd3820f5 \ + --hash=sha256:4ad0415ff61abdd8bb2ae81c1f8f7ec7d91a1011613f2db87c614c550f97bfe9 # via gcp-docuploader -google-crc32c==1.3.0 \ - --hash=sha256:04e7c220798a72fd0f08242bc8d7a05986b2a08a0573396187fd32c1dcdd58b3 \ - --hash=sha256:05340b60bf05b574159e9bd940152a47d38af3fb43803ffe71f11d704b7696a6 \ - --hash=sha256:12674a4c3b56b706153a358eaa1018c4137a5a04635b92b4652440d3d7386206 \ - --hash=sha256:127f9cc3ac41b6a859bd9dc4321097b1a4f6aa7fdf71b4f9227b9e3ebffb4422 \ - --hash=sha256:13af315c3a0eec8bb8b8d80b8b128cb3fcd17d7e4edafc39647846345a3f003a \ - --hash=sha256:1926fd8de0acb9d15ee757175ce7242e235482a783cd4ec711cc999fc103c24e \ - --hash=sha256:226f2f9b8e128a6ca6a9af9b9e8384f7b53a801907425c9a292553a3a7218ce0 \ - --hash=sha256:276de6273eb074a35bc598f8efbc00c7869c5cf2e29c90748fccc8c898c244df \ - --hash=sha256:318f73f5484b5671f0c7f5f63741ab020a599504ed81d209b5c7129ee4667407 \ - --hash=sha256:3bbce1be3687bbfebe29abdb7631b83e6b25da3f4e1856a1611eb21854b689ea \ - --hash=sha256:42ae4781333e331a1743445931b08ebdad73e188fd554259e772556fc4937c48 \ - --hash=sha256:58be56ae0529c664cc04a9c76e68bb92b091e0194d6e3c50bea7e0f266f73713 \ - --hash=sha256:5da2c81575cc3ccf05d9830f9e8d3c70954819ca9a63828210498c0774fda1a3 \ - --hash=sha256:6311853aa2bba4064d0c28ca54e7b50c4d48e3de04f6770f6c60ebda1e975267 \ - --hash=sha256:650e2917660e696041ab3dcd7abac160b4121cd9a484c08406f24c5964099829 \ - --hash=sha256:6a4db36f9721fdf391646685ecffa404eb986cbe007a3289499020daf72e88a2 \ - --hash=sha256:779cbf1ce375b96111db98fca913c1f5ec11b1d870e529b1dc7354b2681a8c3a \ - --hash=sha256:7f6fe42536d9dcd3e2ffb9d3053f5d05221ae3bbcefbe472bdf2c71c793e3183 \ - --hash=sha256:891f712ce54e0d631370e1f4997b3f182f3368179198efc30d477c75d1f44942 \ - --hash=sha256:95c68a4b9b7828ba0428f8f7e3109c5d476ca44996ed9a5f8aac6269296e2d59 \ - --hash=sha256:96a8918a78d5d64e07c8ea4ed2bc44354e3f93f46a4866a40e8db934e4c0d74b \ - --hash=sha256:9c3cf890c3c0ecfe1510a452a165431b5831e24160c5fcf2071f0f85ca5a47cd \ - --hash=sha256:9f58099ad7affc0754ae42e6d87443299f15d739b0ce03c76f515153a5cda06c \ - --hash=sha256:a0b9e622c3b2b8d0ce32f77eba617ab0d6768b82836391e4f8f9e2074582bf02 \ - --hash=sha256:a7f9cbea4245ee36190f85fe1814e2d7b1e5f2186381b082f5d59f99b7f11328 \ - --hash=sha256:bab4aebd525218bab4ee615786c4581952eadc16b1ff031813a2fd51f0cc7b08 \ - --hash=sha256:c124b8c8779bf2d35d9b721e52d4adb41c9bfbde45e6a3f25f0820caa9aba73f \ - --hash=sha256:c9da0a39b53d2fab3e5467329ed50e951eb91386e9d0d5b12daf593973c3b168 \ - --hash=sha256:ca60076c388728d3b6ac3846842474f4250c91efbfe5afa872d3ffd69dd4b318 \ - --hash=sha256:cb6994fff247987c66a8a4e550ef374671c2b82e3c0d2115e689d21e511a652d \ - --hash=sha256:d1c1d6236feab51200272d79b3d3e0f12cf2cbb12b208c835b175a21efdb0a73 \ - --hash=sha256:dd7760a88a8d3d705ff562aa93f8445ead54f58fd482e4f9e2bafb7e177375d4 \ - --hash=sha256:dda4d8a3bb0b50f540f6ff4b6033f3a74e8bf0bd5320b70fab2c03e512a62812 \ - --hash=sha256:e0f1ff55dde0ebcfbef027edc21f71c205845585fffe30d4ec4979416613e9b3 \ - --hash=sha256:e7a539b9be7b9c00f11ef16b55486141bc2cdb0c54762f84e3c6fc091917436d \ - --hash=sha256:eb0b14523758e37802f27b7f8cd973f5f3d33be7613952c0df904b68c4842f0e \ - --hash=sha256:ed447680ff21c14aaceb6a9f99a5f639f583ccfe4ce1a5e1d48eb41c3d6b3217 \ - --hash=sha256:f52a4ad2568314ee713715b1e2d79ab55fab11e8b304fd1462ff5cccf4264b3e \ - --hash=sha256:fbd60c6aaa07c31d7754edbc2334aef50601b7f1ada67a96eb1eb57c7c72378f \ - --hash=sha256:fc28e0db232c62ca0c3600884933178f0825c99be4474cdd645e378a10588125 \ - --hash=sha256:fe31de3002e7b08eb20823b3735b97c86c5926dd0581c7710a680b418a8709d4 \ - --hash=sha256:fec221a051150eeddfdfcff162e6db92c65ecf46cb0f7bb1bf812a1520ec026b \ - --hash=sha256:ff71073ebf0e42258a42a0b34f2c09ec384977e7f6808999102eedd5b49920e3 +google-crc32c==1.5.0 \ + --hash=sha256:024894d9d3cfbc5943f8f230e23950cd4906b2fe004c72e29b209420a1e6b05a \ + --hash=sha256:02c65b9817512edc6a4ae7c7e987fea799d2e0ee40c53ec573a692bee24de876 \ + --hash=sha256:02ebb8bf46c13e36998aeaad1de9b48f4caf545e91d14041270d9dca767b780c \ + --hash=sha256:07eb3c611ce363c51a933bf6bd7f8e3878a51d124acfc89452a75120bc436289 \ + --hash=sha256:1034d91442ead5a95b5aaef90dbfaca8633b0247d1e41621d1e9f9db88c36298 \ + --hash=sha256:116a7c3c616dd14a3de8c64a965828b197e5f2d121fedd2f8c5585c547e87b02 \ + --hash=sha256:19e0a019d2c4dcc5e598cd4a4bc7b008546b0358bd322537c74ad47a5386884f \ + --hash=sha256:1c7abdac90433b09bad6c43a43af253e688c9cfc1c86d332aed13f9a7c7f65e2 \ + --hash=sha256:1e986b206dae4476f41bcec1faa057851f3889503a70e1bdb2378d406223994a \ + --hash=sha256:272d3892a1e1a2dbc39cc5cde96834c236d5327e2122d3aaa19f6614531bb6eb \ + --hash=sha256:278d2ed7c16cfc075c91378c4f47924c0625f5fc84b2d50d921b18b7975bd210 \ + --hash=sha256:2ad40e31093a4af319dadf503b2467ccdc8f67c72e4bcba97f8c10cb078207b5 \ + --hash=sha256:2e920d506ec85eb4ba50cd4228c2bec05642894d4c73c59b3a2fe20346bd00ee \ + --hash=sha256:3359fc442a743e870f4588fcf5dcbc1bf929df1fad8fb9905cd94e5edb02e84c \ + --hash=sha256:37933ec6e693e51a5b07505bd05de57eee12f3e8c32b07da7e73669398e6630a \ + --hash=sha256:398af5e3ba9cf768787eef45c803ff9614cc3e22a5b2f7d7ae116df8b11e3314 \ + --hash=sha256:3b747a674c20a67343cb61d43fdd9207ce5da6a99f629c6e2541aa0e89215bcd \ + --hash=sha256:461665ff58895f508e2866824a47bdee72497b091c730071f2b7575d5762ab65 \ + --hash=sha256:4c6fdd4fccbec90cc8a01fc00773fcd5fa28db683c116ee3cb35cd5da9ef6c37 \ + --hash=sha256:5829b792bf5822fd0a6f6eb34c5f81dd074f01d570ed7f36aa101d6fc7a0a6e4 \ + --hash=sha256:596d1f98fc70232fcb6590c439f43b350cb762fb5d61ce7b0e9db4539654cc13 \ + --hash=sha256:5ae44e10a8e3407dbe138984f21e536583f2bba1be9491239f942c2464ac0894 \ + --hash=sha256:635f5d4dd18758a1fbd1049a8e8d2fee4ffed124462d837d1a02a0e009c3ab31 \ + --hash=sha256:64e52e2b3970bd891309c113b54cf0e4384762c934d5ae56e283f9a0afcd953e \ + --hash=sha256:66741ef4ee08ea0b2cc3c86916ab66b6aef03768525627fd6a1b34968b4e3709 \ + --hash=sha256:67b741654b851abafb7bc625b6d1cdd520a379074e64b6a128e3b688c3c04740 \ + --hash=sha256:6ac08d24c1f16bd2bf5eca8eaf8304812f44af5cfe5062006ec676e7e1d50afc \ + --hash=sha256:6f998db4e71b645350b9ac28a2167e6632c239963ca9da411523bb439c5c514d \ + --hash=sha256:72218785ce41b9cfd2fc1d6a017dc1ff7acfc4c17d01053265c41a2c0cc39b8c \ + --hash=sha256:74dea7751d98034887dbd821b7aae3e1d36eda111d6ca36c206c44478035709c \ + --hash=sha256:759ce4851a4bb15ecabae28f4d2e18983c244eddd767f560165563bf9aefbc8d \ + --hash=sha256:77e2fd3057c9d78e225fa0a2160f96b64a824de17840351b26825b0848022906 \ + --hash=sha256:7c074fece789b5034b9b1404a1f8208fc2d4c6ce9decdd16e8220c5a793e6f61 \ + --hash=sha256:7c42c70cd1d362284289c6273adda4c6af8039a8ae12dc451dcd61cdabb8ab57 \ + --hash=sha256:7f57f14606cd1dd0f0de396e1e53824c371e9544a822648cd76c034d209b559c \ + --hash=sha256:83c681c526a3439b5cf94f7420471705bbf96262f49a6fe546a6db5f687a3d4a \ + --hash=sha256:8485b340a6a9e76c62a7dce3c98e5f102c9219f4cfbf896a00cf48caf078d438 \ + --hash=sha256:84e6e8cd997930fc66d5bb4fde61e2b62ba19d62b7abd7a69920406f9ecca946 \ + --hash=sha256:89284716bc6a5a415d4eaa11b1726d2d60a0cd12aadf5439828353662ede9dd7 \ + --hash=sha256:8b87e1a59c38f275c0e3676fc2ab6d59eccecfd460be267ac360cc31f7bcde96 \ + --hash=sha256:8f24ed114432de109aa9fd317278518a5af2d31ac2ea6b952b2f7782b43da091 \ + --hash=sha256:98cb4d057f285bd80d8778ebc4fde6b4d509ac3f331758fb1528b733215443ae \ + --hash=sha256:998679bf62b7fb599d2878aa3ed06b9ce688b8974893e7223c60db155f26bd8d \ + --hash=sha256:9ba053c5f50430a3fcfd36f75aff9caeba0440b2d076afdb79a318d6ca245f88 \ + --hash=sha256:9c99616c853bb585301df6de07ca2cadad344fd1ada6d62bb30aec05219c45d2 \ + --hash=sha256:a1fd716e7a01f8e717490fbe2e431d2905ab8aa598b9b12f8d10abebb36b04dd \ + --hash=sha256:a2355cba1f4ad8b6988a4ca3feed5bff33f6af2d7f134852cf279c2aebfde541 \ + --hash=sha256:b1f8133c9a275df5613a451e73f36c2aea4fe13c5c8997e22cf355ebd7bd0728 \ + --hash=sha256:b8667b48e7a7ef66afba2c81e1094ef526388d35b873966d8a9a447974ed9178 \ + --hash=sha256:ba1eb1843304b1e5537e1fca632fa894d6f6deca8d6389636ee5b4797affb968 \ + --hash=sha256:be82c3c8cfb15b30f36768797a640e800513793d6ae1724aaaafe5bf86f8f346 \ + --hash=sha256:c02ec1c5856179f171e032a31d6f8bf84e5a75c45c33b2e20a3de353b266ebd8 \ + --hash=sha256:c672d99a345849301784604bfeaeba4db0c7aae50b95be04dd651fd2a7310b93 \ + --hash=sha256:c6c777a480337ac14f38564ac88ae82d4cd238bf293f0a22295b66eb89ffced7 \ + --hash=sha256:cae0274952c079886567f3f4f685bcaf5708f0a23a5f5216fdab71f81a6c0273 \ + --hash=sha256:cd67cf24a553339d5062eff51013780a00d6f97a39ca062781d06b3a73b15462 \ + --hash=sha256:d3515f198eaa2f0ed49f8819d5732d70698c3fa37384146079b3799b97667a94 \ + --hash=sha256:d5280312b9af0976231f9e317c20e4a61cd2f9629b7bfea6a693d1878a264ebd \ + --hash=sha256:de06adc872bcd8c2a4e0dc51250e9e65ef2ca91be023b9d13ebd67c2ba552e1e \ + --hash=sha256:e1674e4307fa3024fc897ca774e9c7562c957af85df55efe2988ed9056dc4e57 \ + --hash=sha256:e2096eddb4e7c7bdae4bd69ad364e55e07b8316653234a56552d9c988bd2d61b \ + --hash=sha256:e560628513ed34759456a416bf86b54b2476c59144a9138165c9a1575801d0d9 \ + --hash=sha256:edfedb64740750e1a3b16152620220f51d58ff1b4abceb339ca92e934775c27a \ + --hash=sha256:f13cae8cc389a440def0c8c52057f37359014ccbc9dc1f0827936bcd367c6100 \ + --hash=sha256:f314013e7dcd5cf45ab1945d92e713eec788166262ae8deb2cfacd53def27325 \ + --hash=sha256:f583edb943cf2e09c60441b910d6a20b4d9d626c75a36c8fcac01a6c96c01183 \ + --hash=sha256:fd8536e902db7e365f49e7d9029283403974ccf29b13fc7028b97e2295b33556 \ + --hash=sha256:fe70e325aa68fa4b5edf7d1a4b6f691eb04bbccac0ace68e34820d283b5f80d4 # via google-resumable-media -google-resumable-media==2.3.3 \ - --hash=sha256:27c52620bd364d1c8116eaac4ea2afcbfb81ae9139fb3199652fcac1724bfb6c \ - --hash=sha256:5b52774ea7a829a8cdaa8bd2d4c3d4bc660c91b30857ab2668d0eb830f4ea8c5 +google-resumable-media==2.4.0 \ + --hash=sha256:2aa004c16d295c8f6c33b2b4788ba59d366677c0a25ae7382436cb30f776deaa \ + --hash=sha256:8d5518502f92b9ecc84ac46779bd4f09694ecb3ba38a3e7ca737a86d15cbca1f # via google-cloud-storage -googleapis-common-protos==1.56.4 \ - --hash=sha256:8eb2cbc91b69feaf23e32452a7ae60e791e09967d81d4fcc7fc388182d1bd394 \ - --hash=sha256:c25873c47279387cfdcbdafa36149887901d36202cb645a0e4f29686bf6e4417 +googleapis-common-protos==1.57.0 \ + --hash=sha256:27a849d6205838fb6cc3c1c21cb9800707a661bb21c6ce7fb13e99eb1f8a0c46 \ + --hash=sha256:a9f4a1d7f6d9809657b7f1316a1aa527f6664891531bcfcc13b6696e685f443c # via google-api-core -idna==3.3 \ - --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \ - --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d +idna==3.4 \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 # via requests -importlib-metadata==4.12.0 \ - --hash=sha256:637245b8bab2b6502fcbc752cc4b7a6f6243bb02b31c5c26156ad103d3d45670 \ - --hash=sha256:7401a975809ea1fdc658c3aa4f78cc2195a0e019c5cbc4c06122884e9ae80c23 +importlib-metadata==5.0.0 \ + --hash=sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab \ + --hash=sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43 # via # -r requirements.in + # keyring # twine -jaraco-classes==3.2.2 \ - --hash=sha256:6745f113b0b588239ceb49532aa09c3ebb947433ce311ef2f8e3ad64ebb74594 \ - --hash=sha256:e6ef6fd3fcf4579a7a019d87d1e56a883f4e4c35cfe925f86731abc58804e647 +jaraco-classes==3.2.3 \ + --hash=sha256:2353de3288bc6b82120752201c6b1c1a14b058267fa424ed5ce5984e3b922158 \ + --hash=sha256:89559fa5c1d3c34eff6f631ad80bb21f378dbcbb35dd161fd2c6b93f5be2f98a # via keyring jeepney==0.8.0 \ --hash=sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806 \ @@ -255,9 +288,9 @@ jinja2==3.1.2 \ --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 # via gcp-releasetool -keyring==23.9.0 \ - --hash=sha256:4c32a31174faaee48f43a7e2c7e9c3216ec5e95acf22a2bebfb4a1d05056ee44 \ - --hash=sha256:98f060ec95ada2ab910c195a2d4317be6ef87936a766b239c46aa3c7aac4f0db +keyring==23.11.0 \ + --hash=sha256:3dd30011d555f1345dec2c262f0153f2f0ca6bca041fb1dc4588349bb4c0ac1e \ + --hash=sha256:ad192263e2cdd5f12875dedc2da13534359a7e760e77f8d04b50968a821c2361 # via # gcp-releasetool # twine @@ -303,9 +336,9 @@ markupsafe==2.1.1 \ --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 # via jinja2 -more-itertools==8.14.0 \ - --hash=sha256:1bc4f91ee5b1b31ac7ceacc17c09befe6a40a503907baf9c839c229b5095cfd2 \ - --hash=sha256:c09443cd3d5438b8dafccd867a6bc1cb0894389e90cb53d227456b0b0bccb750 +more-itertools==9.0.0 \ + --hash=sha256:250e83d7e81d0c87ca6bd942e6aeab8cc9daa6096d12c5308f3f92fa5e5c1f41 \ + --hash=sha256:5a6257e40878ef0520b1803990e3e22303a41b5714006c32a3fd8304b26ea1ab # via jaraco-classes nox==2022.8.7 \ --hash=sha256:1b894940551dc5c389f9271d197ca5d655d40bdc6ccf93ed6880e4042760a34b \ @@ -321,34 +354,33 @@ pkginfo==1.8.3 \ --hash=sha256:848865108ec99d4901b2f7e84058b6e7660aae8ae10164e015a6dcf5b242a594 \ --hash=sha256:a84da4318dd86f870a9447a8c98340aa06216bfc6f2b7bdc4b8766984ae1867c # via twine -platformdirs==2.5.2 \ - --hash=sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788 \ - --hash=sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19 +platformdirs==2.5.4 \ + --hash=sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7 \ + --hash=sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10 # via virtualenv -protobuf==3.20.2 \ - --hash=sha256:03d76b7bd42ac4a6e109742a4edf81ffe26ffd87c5993126d894fe48a120396a \ - --hash=sha256:09e25909c4297d71d97612f04f41cea8fa8510096864f2835ad2f3b3df5a5559 \ - --hash=sha256:18e34a10ae10d458b027d7638a599c964b030c1739ebd035a1dfc0e22baa3bfe \ - --hash=sha256:291fb4307094bf5ccc29f424b42268640e00d5240bf0d9b86bf3079f7576474d \ - --hash=sha256:2c0b040d0b5d5d207936ca2d02f00f765906622c07d3fa19c23a16a8ca71873f \ - --hash=sha256:384164994727f274cc34b8abd41a9e7e0562801361ee77437099ff6dfedd024b \ - --hash=sha256:3cb608e5a0eb61b8e00fe641d9f0282cd0eedb603be372f91f163cbfbca0ded0 \ - --hash=sha256:5d9402bf27d11e37801d1743eada54372f986a372ec9679673bfcc5c60441151 \ - --hash=sha256:712dca319eee507a1e7df3591e639a2b112a2f4a62d40fe7832a16fd19151750 \ - --hash=sha256:7a5037af4e76c975b88c3becdf53922b5ffa3f2cddf657574a4920a3b33b80f3 \ - --hash=sha256:8228e56a865c27163d5d1d1771d94b98194aa6917bcfb6ce139cbfa8e3c27334 \ - --hash=sha256:84a1544252a933ef07bb0b5ef13afe7c36232a774affa673fc3636f7cee1db6c \ - --hash=sha256:84fe5953b18a383fd4495d375fe16e1e55e0a3afe7b4f7b4d01a3a0649fcda9d \ - --hash=sha256:9c673c8bfdf52f903081816b9e0e612186684f4eb4c17eeb729133022d6032e3 \ - --hash=sha256:9f876a69ca55aed879b43c295a328970306e8e80a263ec91cf6e9189243c613b \ - --hash=sha256:a9e5ae5a8e8985c67e8944c23035a0dff2c26b0f5070b2f55b217a1c33bbe8b1 \ - --hash=sha256:b4fdb29c5a7406e3f7ef176b2a7079baa68b5b854f364c21abe327bbeec01cdb \ - --hash=sha256:c184485e0dfba4dfd451c3bd348c2e685d6523543a0f91b9fd4ae90eb09e8422 \ - --hash=sha256:c9cdf251c582c16fd6a9f5e95836c90828d51b0069ad22f463761d27c6c19019 \ - --hash=sha256:e39cf61bb8582bda88cdfebc0db163b774e7e03364bbf9ce1ead13863e81e359 \ - --hash=sha256:e8fbc522303e09036c752a0afcc5c0603e917222d8bedc02813fd73b4b4ed804 \ - --hash=sha256:f34464ab1207114e73bba0794d1257c150a2b89b7a9faf504e00af7c9fd58978 \ - --hash=sha256:f52dabc96ca99ebd2169dadbe018824ebda08a795c7684a0b7d203a290f3adb0 +protobuf==3.20.3 \ + --hash=sha256:03038ac1cfbc41aa21f6afcbcd357281d7521b4157926f30ebecc8d4ea59dcb7 \ + --hash=sha256:28545383d61f55b57cf4df63eebd9827754fd2dc25f80c5253f9184235db242c \ + --hash=sha256:2e3427429c9cffebf259491be0af70189607f365c2f41c7c3764af6f337105f2 \ + --hash=sha256:398a9e0c3eaceb34ec1aee71894ca3299605fa8e761544934378bbc6c97de23b \ + --hash=sha256:44246bab5dd4b7fbd3c0c80b6f16686808fab0e4aca819ade6e8d294a29c7050 \ + --hash=sha256:447d43819997825d4e71bf5769d869b968ce96848b6479397e29fc24c4a5dfe9 \ + --hash=sha256:67a3598f0a2dcbc58d02dd1928544e7d88f764b47d4a286202913f0b2801c2e7 \ + --hash=sha256:74480f79a023f90dc6e18febbf7b8bac7508420f2006fabd512013c0c238f454 \ + --hash=sha256:819559cafa1a373b7096a482b504ae8a857c89593cf3a25af743ac9ecbd23480 \ + --hash=sha256:899dc660cd599d7352d6f10d83c95df430a38b410c1b66b407a6b29265d66469 \ + --hash=sha256:8c0c984a1b8fef4086329ff8dd19ac77576b384079247c770f29cc8ce3afa06c \ + --hash=sha256:9aae4406ea63d825636cc11ffb34ad3379335803216ee3a856787bcf5ccc751e \ + --hash=sha256:a7ca6d488aa8ff7f329d4c545b2dbad8ac31464f1d8b1c87ad1346717731e4db \ + --hash=sha256:b6cc7ba72a8850621bfec987cb72623e703b7fe2b9127a161ce61e61558ad905 \ + --hash=sha256:bf01b5720be110540be4286e791db73f84a2b721072a3711efff6c324cdf074b \ + --hash=sha256:c02ce36ec760252242a33967d51c289fd0e1c0e6e5cc9397e2279177716add86 \ + --hash=sha256:d9e4432ff660d67d775c66ac42a67cf2453c27cb4d738fc22cb53b5d84c135d4 \ + --hash=sha256:daa564862dd0d39c00f8086f88700fdbe8bc717e993a21e90711acfed02f2402 \ + --hash=sha256:de78575669dddf6099a8a0f46a27e82a1783c557ccc38ee620ed8cc96d3be7d7 \ + --hash=sha256:e64857f395505ebf3d2569935506ae0dfc4a15cb80dc25261176c784662cdcc4 \ + --hash=sha256:f4bd856d702e5b0d96a00ec6b307b0f51c1982c2bf9c0052cf9019e9a544ba99 \ + --hash=sha256:f4c42102bc82a51108e449cbb32b19b180022941c727bac0cfd50170341f16ee # via # gcp-docuploader # gcp-releasetool @@ -377,9 +409,9 @@ pygments==2.13.0 \ # via # readme-renderer # rich -pyjwt==2.4.0 \ - --hash=sha256:72d1d253f32dbd4f5c88eaf1fdc62f3a19f676ccbadb9dbc5d07e951b2b26daf \ - --hash=sha256:d42908208c699b3b973cbeb01a969ba6a96c821eefb1c5bfe4c390c01d67abba +pyjwt==2.6.0 \ + --hash=sha256:69285c7e31fc44f68a1feb309e948e0df53259d579295e6cfe2b1792329f05fd \ + --hash=sha256:d83c3d892a77bbb74d3e1a2cfa90afaadb60945205d1095d9221f04466f64c14 # via gcp-releasetool pyparsing==3.0.9 \ --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ @@ -392,9 +424,9 @@ python-dateutil==2.8.2 \ --hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \ --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 # via gcp-releasetool -readme-renderer==37.0 \ - --hash=sha256:07b7ea234e03e58f77cc222e206e6abb8f4c0435becce5104794ee591f9301c5 \ - --hash=sha256:9fa416704703e509eeb900696751c908ddeb2011319d93700d8f18baff887a69 +readme-renderer==37.3 \ + --hash=sha256:cd653186dfc73055656f090f227f5cb22a046d7f71a841dfa305f55c9a513273 \ + --hash=sha256:f67a16caedfa71eef48a31b39708637a6f4664c4394801a7b0d6432d13907343 # via twine requests==2.28.1 \ --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 \ @@ -405,17 +437,17 @@ requests==2.28.1 \ # google-cloud-storage # requests-toolbelt # twine -requests-toolbelt==0.9.1 \ - --hash=sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f \ - --hash=sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0 +requests-toolbelt==0.10.1 \ + --hash=sha256:18565aa58116d9951ac39baa288d3adb5b3ff975c4f25eee78555d89e8f247f7 \ + --hash=sha256:62e09f7ff5ccbda92772a29f394a49c3ad6cb181d568b1337626b2abb628a63d # via twine rfc3986==2.0.0 \ --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \ --hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c # via twine -rich==12.5.1 \ - --hash=sha256:2eb4e6894cde1e017976d2975ac210ef515d7548bc595ba20e195fb9628acdeb \ - --hash=sha256:63a5c5ce3673d3d5fbbf23cd87e11ab84b6b451436f1b7f19ec54b6bc36ed7ca +rich==12.6.0 \ + --hash=sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e \ + --hash=sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0 # via twine rsa==4.9 \ --hash=sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7 \ @@ -437,9 +469,9 @@ twine==4.0.1 \ --hash=sha256:42026c18e394eac3e06693ee52010baa5313e4811d5a11050e7d48436cf41b9e \ --hash=sha256:96b1cf12f7ae611a4a40b6ae8e9570215daff0611828f5fe1f37a16255ab24a0 # via -r requirements.in -typing-extensions==4.3.0 \ - --hash=sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02 \ - --hash=sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6 +typing-extensions==4.4.0 \ + --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ + --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e # via -r requirements.in urllib3==1.26.12 \ --hash=sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e \ @@ -447,25 +479,25 @@ urllib3==1.26.12 \ # via # requests # twine -virtualenv==20.16.4 \ - --hash=sha256:014f766e4134d0008dcaa1f95bafa0fb0f575795d07cae50b1bee514185d6782 \ - --hash=sha256:035ed57acce4ac35c82c9d8802202b0e71adac011a511ff650cbcf9635006a22 +virtualenv==20.16.7 \ + --hash=sha256:8691e3ff9387f743e00f6bb20f70121f5e4f596cae754531f2b3b3a1b1ac696e \ + --hash=sha256:efd66b00386fdb7dbe4822d172303f40cd05e50e01740b19ea42425cbe653e29 # via nox webencodings==0.5.1 \ --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \ --hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923 # via bleach -wheel==0.37.1 \ - --hash=sha256:4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a \ - --hash=sha256:e9a504e793efbca1b8e0e9cb979a249cf4a0a7b5b8c9e8b65a5e39d49529c1c4 +wheel==0.38.4 \ + --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ + --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 # via -r requirements.in -zipp==3.8.1 \ - --hash=sha256:05b45f1ee8f807d0cc928485ca40a07cb491cf092ff587c0df9cb1fd154848d2 \ - --hash=sha256:47c40d7fe183a6f21403a199b3e4192cca5774656965b0a4988ad2f8feb5f009 +zipp==3.10.0 \ + --hash=sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1 \ + --hash=sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: -setuptools==65.2.0 \ - --hash=sha256:7f4bc85450898a09f76ebf28b72fa25bc7111f6c7d665d514a60bba9c75ef2a9 \ - --hash=sha256:a3ca5857c89f82f5c9410e8508cb32f4872a3bafd4aa7ae122a24ca33bccc750 +setuptools==65.5.1 \ + --hash=sha256:d0b9a8433464d5800cbe05094acf5c6d52a91bfac9b52bcfc4d41382be5d5d31 \ + --hash=sha256:e197a19aa8ec9722928f2206f8de752def0e4c9fc6953527360d1c36d94ddb2f # via -r requirements.in diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 46d2371..5405cc8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -25,7 +25,7 @@ repos: rev: 22.3.0 hooks: - id: black -- repo: https://gitlab.com/pycqa/flake8 +- repo: https://github.com/pycqa/flake8 rev: 3.9.2 hooks: - id: flake8 diff --git a/.release-please-manifest.json b/.release-please-manifest.json new file mode 100644 index 0000000..64e0684 --- /dev/null +++ b/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + ".": "1.7.0" +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 58052a7..e55df07 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,34 @@ # Changelog +## [1.7.0](https://github.com/googleapis/python-dataproc-metastore/compare/v1.6.3...v1.7.0) (2022-12-15) + + +### Features + +* Add support for `google.cloud.metastore.__version__` ([1c64e1a](https://github.com/googleapis/python-dataproc-metastore/commit/1c64e1a8887c2518600adbfa5b91dc4248876b85)) +* Add typing to proto.Message based class attributes ([1c64e1a](https://github.com/googleapis/python-dataproc-metastore/commit/1c64e1a8887c2518600adbfa5b91dc4248876b85)) +* Added DatabaseType field ([1c64e1a](https://github.com/googleapis/python-dataproc-metastore/commit/1c64e1a8887c2518600adbfa5b91dc4248876b85)) +* Added EncryptionConfig field ([1c64e1a](https://github.com/googleapis/python-dataproc-metastore/commit/1c64e1a8887c2518600adbfa5b91dc4248876b85)) +* Added federation API ([1c64e1a](https://github.com/googleapis/python-dataproc-metastore/commit/1c64e1a8887c2518600adbfa5b91dc4248876b85)) +* Added NetworkConfig field ([1c64e1a](https://github.com/googleapis/python-dataproc-metastore/commit/1c64e1a8887c2518600adbfa5b91dc4248876b85)) +* Added TelemetryConfiguration field ([1c64e1a](https://github.com/googleapis/python-dataproc-metastore/commit/1c64e1a8887c2518600adbfa5b91dc4248876b85)) + + +### Bug Fixes + +* Add dict typing for client_options ([1c64e1a](https://github.com/googleapis/python-dataproc-metastore/commit/1c64e1a8887c2518600adbfa5b91dc4248876b85)) +* **deps:** Require google-api-core >=1.34.0, >=2.11.0 ([8cd4a8e](https://github.com/googleapis/python-dataproc-metastore/commit/8cd4a8e87779cc0c3098b5fdb2cd70c4b809ca3c)) +* Drop usage of pkg_resources ([8cd4a8e](https://github.com/googleapis/python-dataproc-metastore/commit/8cd4a8e87779cc0c3098b5fdb2cd70c4b809ca3c)) +* Fix timeout default values ([8cd4a8e](https://github.com/googleapis/python-dataproc-metastore/commit/8cd4a8e87779cc0c3098b5fdb2cd70c4b809ca3c)) + + +### Documentation + +* Fix formatting for subnetwork field pattern ([#190](https://github.com/googleapis/python-dataproc-metastore/issues/190)) ([5527625](https://github.com/googleapis/python-dataproc-metastore/commit/5527625b9b0cc1d9c1089ad5c721333a218014e1)) +* Fix formatting for subnetwork field pattern ([#191](https://github.com/googleapis/python-dataproc-metastore/issues/191)) ([ed78105](https://github.com/googleapis/python-dataproc-metastore/commit/ed78105c38c43d0cb165756b2b3945acbd31731d)) +* **samples:** Snippetgen handling of repeated enum field ([1c64e1a](https://github.com/googleapis/python-dataproc-metastore/commit/1c64e1a8887c2518600adbfa5b91dc4248876b85)) +* **samples:** Snippetgen should call await on the operation coroutine before calling result ([8cd4a8e](https://github.com/googleapis/python-dataproc-metastore/commit/8cd4a8e87779cc0c3098b5fdb2cd70c4b809ca3c)) + ## [1.6.3](https://github.com/googleapis/python-dataproc-metastore/compare/v1.6.2...v1.6.3) (2022-10-07) diff --git a/docs/metastore_v1/dataproc_metastore_federation.rst b/docs/metastore_v1/dataproc_metastore_federation.rst new file mode 100644 index 0000000..78c95c8 --- /dev/null +++ b/docs/metastore_v1/dataproc_metastore_federation.rst @@ -0,0 +1,10 @@ +DataprocMetastoreFederation +--------------------------------------------- + +.. automodule:: google.cloud.metastore_v1.services.dataproc_metastore_federation + :members: + :inherited-members: + +.. automodule:: google.cloud.metastore_v1.services.dataproc_metastore_federation.pagers + :members: + :inherited-members: diff --git a/docs/metastore_v1/services.rst b/docs/metastore_v1/services.rst index a3f1003..2bb0a56 100644 --- a/docs/metastore_v1/services.rst +++ b/docs/metastore_v1/services.rst @@ -4,3 +4,4 @@ Services for Google Cloud Metastore v1 API :maxdepth: 2 dataproc_metastore + dataproc_metastore_federation diff --git a/docs/metastore_v1/types.rst b/docs/metastore_v1/types.rst index 48f7b8e..cc9df1b 100644 --- a/docs/metastore_v1/types.rst +++ b/docs/metastore_v1/types.rst @@ -3,5 +3,4 @@ Types for Google Cloud Metastore v1 API .. automodule:: google.cloud.metastore_v1.types :members: - :undoc-members: :show-inheritance: diff --git a/docs/metastore_v1alpha/dataproc_metastore_federation.rst b/docs/metastore_v1alpha/dataproc_metastore_federation.rst new file mode 100644 index 0000000..71b4b18 --- /dev/null +++ b/docs/metastore_v1alpha/dataproc_metastore_federation.rst @@ -0,0 +1,10 @@ +DataprocMetastoreFederation +--------------------------------------------- + +.. automodule:: google.cloud.metastore_v1alpha.services.dataproc_metastore_federation + :members: + :inherited-members: + +.. automodule:: google.cloud.metastore_v1alpha.services.dataproc_metastore_federation.pagers + :members: + :inherited-members: diff --git a/docs/metastore_v1alpha/services.rst b/docs/metastore_v1alpha/services.rst index e99fba9..5e2f664 100644 --- a/docs/metastore_v1alpha/services.rst +++ b/docs/metastore_v1alpha/services.rst @@ -4,3 +4,4 @@ Services for Google Cloud Metastore v1alpha API :maxdepth: 2 dataproc_metastore + dataproc_metastore_federation diff --git a/docs/metastore_v1alpha/types.rst b/docs/metastore_v1alpha/types.rst index 0f7bc80..4713153 100644 --- a/docs/metastore_v1alpha/types.rst +++ b/docs/metastore_v1alpha/types.rst @@ -3,5 +3,4 @@ Types for Google Cloud Metastore v1alpha API .. automodule:: google.cloud.metastore_v1alpha.types :members: - :undoc-members: :show-inheritance: diff --git a/docs/metastore_v1beta/dataproc_metastore_federation.rst b/docs/metastore_v1beta/dataproc_metastore_federation.rst new file mode 100644 index 0000000..5a09d31 --- /dev/null +++ b/docs/metastore_v1beta/dataproc_metastore_federation.rst @@ -0,0 +1,10 @@ +DataprocMetastoreFederation +--------------------------------------------- + +.. automodule:: google.cloud.metastore_v1beta.services.dataproc_metastore_federation + :members: + :inherited-members: + +.. automodule:: google.cloud.metastore_v1beta.services.dataproc_metastore_federation.pagers + :members: + :inherited-members: diff --git a/docs/metastore_v1beta/services.rst b/docs/metastore_v1beta/services.rst index ff37440..5e9f5ae 100644 --- a/docs/metastore_v1beta/services.rst +++ b/docs/metastore_v1beta/services.rst @@ -4,3 +4,4 @@ Services for Google Cloud Metastore v1beta API :maxdepth: 2 dataproc_metastore + dataproc_metastore_federation diff --git a/docs/metastore_v1beta/types.rst b/docs/metastore_v1beta/types.rst index 963a364..c52aabe 100644 --- a/docs/metastore_v1beta/types.rst +++ b/docs/metastore_v1beta/types.rst @@ -3,5 +3,4 @@ Types for Google Cloud Metastore v1beta API .. automodule:: google.cloud.metastore_v1beta.types :members: - :undoc-members: :show-inheritance: diff --git a/google/cloud/metastore/__init__.py b/google/cloud/metastore/__init__.py index e99e812..7a01a0e 100644 --- a/google/cloud/metastore/__init__.py +++ b/google/cloud/metastore/__init__.py @@ -13,6 +13,10 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from google.cloud.metastore import gapic_version as package_version + +__version__ = package_version.__version__ + from google.cloud.metastore_v1.services.dataproc_metastore.async_client import ( DataprocMetastoreAsyncClient, @@ -20,6 +24,12 @@ from google.cloud.metastore_v1.services.dataproc_metastore.client import ( DataprocMetastoreClient, ) +from google.cloud.metastore_v1.services.dataproc_metastore_federation.async_client import ( + DataprocMetastoreFederationAsyncClient, +) +from google.cloud.metastore_v1.services.dataproc_metastore_federation.client import ( + DataprocMetastoreFederationClient, +) from google.cloud.metastore_v1.types.metastore import ( Backup, CreateBackupRequest, @@ -28,6 +38,7 @@ DatabaseDumpSpec, DeleteBackupRequest, DeleteServiceRequest, + EncryptionConfig, ExportMetadataRequest, GetBackupRequest, GetMetadataImportRequest, @@ -45,18 +56,32 @@ MetadataExport, MetadataImport, MetadataManagementActivity, + NetworkConfig, OperationMetadata, Restore, RestoreServiceRequest, Secret, Service, + TelemetryConfig, UpdateMetadataImportRequest, UpdateServiceRequest, ) +from google.cloud.metastore_v1.types.metastore_federation import ( + BackendMetastore, + CreateFederationRequest, + DeleteFederationRequest, + Federation, + GetFederationRequest, + ListFederationsRequest, + ListFederationsResponse, + UpdateFederationRequest, +) __all__ = ( "DataprocMetastoreClient", "DataprocMetastoreAsyncClient", + "DataprocMetastoreFederationClient", + "DataprocMetastoreFederationAsyncClient", "Backup", "CreateBackupRequest", "CreateMetadataImportRequest", @@ -64,6 +89,7 @@ "DatabaseDumpSpec", "DeleteBackupRequest", "DeleteServiceRequest", + "EncryptionConfig", "ExportMetadataRequest", "GetBackupRequest", "GetMetadataImportRequest", @@ -81,11 +107,21 @@ "MetadataExport", "MetadataImport", "MetadataManagementActivity", + "NetworkConfig", "OperationMetadata", "Restore", "RestoreServiceRequest", "Secret", "Service", + "TelemetryConfig", "UpdateMetadataImportRequest", "UpdateServiceRequest", + "BackendMetastore", + "CreateFederationRequest", + "DeleteFederationRequest", + "Federation", + "GetFederationRequest", + "ListFederationsRequest", + "ListFederationsResponse", + "UpdateFederationRequest", ) diff --git a/google/cloud/metastore/gapic_version.py b/google/cloud/metastore/gapic_version.py new file mode 100644 index 0000000..f033c61 --- /dev/null +++ b/google/cloud/metastore/gapic_version.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +__version__ = "1.7.0" # {x-release-please-version} diff --git a/google/cloud/metastore/py.typed b/google/cloud/metastore/py.typed index 72edca0..f949c43 100644 --- a/google/cloud/metastore/py.typed +++ b/google/cloud/metastore/py.typed @@ -1,2 +1,2 @@ # Marker file for PEP 561. -# The google-cloud-metastore package uses inline types. +# The google-cloud-dataproc-metastore package uses inline types. diff --git a/google/cloud/metastore_v1/__init__.py b/google/cloud/metastore_v1/__init__.py index 4591f52..bcf385e 100644 --- a/google/cloud/metastore_v1/__init__.py +++ b/google/cloud/metastore_v1/__init__.py @@ -13,11 +13,19 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from google.cloud.metastore import gapic_version as package_version + +__version__ = package_version.__version__ + from .services.dataproc_metastore import ( DataprocMetastoreAsyncClient, DataprocMetastoreClient, ) +from .services.dataproc_metastore_federation import ( + DataprocMetastoreFederationAsyncClient, + DataprocMetastoreFederationClient, +) from .types.metastore import ( Backup, CreateBackupRequest, @@ -26,6 +34,7 @@ DatabaseDumpSpec, DeleteBackupRequest, DeleteServiceRequest, + EncryptionConfig, ExportMetadataRequest, GetBackupRequest, GetMetadataImportRequest, @@ -43,33 +52,55 @@ MetadataExport, MetadataImport, MetadataManagementActivity, + NetworkConfig, OperationMetadata, Restore, RestoreServiceRequest, Secret, Service, + TelemetryConfig, UpdateMetadataImportRequest, UpdateServiceRequest, ) +from .types.metastore_federation import ( + BackendMetastore, + CreateFederationRequest, + DeleteFederationRequest, + Federation, + GetFederationRequest, + ListFederationsRequest, + ListFederationsResponse, + UpdateFederationRequest, +) __all__ = ( "DataprocMetastoreAsyncClient", + "DataprocMetastoreFederationAsyncClient", + "BackendMetastore", "Backup", "CreateBackupRequest", + "CreateFederationRequest", "CreateMetadataImportRequest", "CreateServiceRequest", "DatabaseDumpSpec", "DataprocMetastoreClient", + "DataprocMetastoreFederationClient", "DeleteBackupRequest", + "DeleteFederationRequest", "DeleteServiceRequest", + "EncryptionConfig", "ExportMetadataRequest", + "Federation", "GetBackupRequest", + "GetFederationRequest", "GetMetadataImportRequest", "GetServiceRequest", "HiveMetastoreConfig", "KerberosConfig", "ListBackupsRequest", "ListBackupsResponse", + "ListFederationsRequest", + "ListFederationsResponse", "ListMetadataImportsRequest", "ListMetadataImportsResponse", "ListServicesRequest", @@ -79,11 +110,14 @@ "MetadataExport", "MetadataImport", "MetadataManagementActivity", + "NetworkConfig", "OperationMetadata", "Restore", "RestoreServiceRequest", "Secret", "Service", + "TelemetryConfig", + "UpdateFederationRequest", "UpdateMetadataImportRequest", "UpdateServiceRequest", ) diff --git a/google/cloud/metastore_v1/gapic_metadata.json b/google/cloud/metastore_v1/gapic_metadata.json index 6995396..eefd557 100644 --- a/google/cloud/metastore_v1/gapic_metadata.json +++ b/google/cloud/metastore_v1/gapic_metadata.json @@ -168,6 +168,70 @@ } } } + }, + "DataprocMetastoreFederation": { + "clients": { + "grpc": { + "libraryClient": "DataprocMetastoreFederationClient", + "rpcs": { + "CreateFederation": { + "methods": [ + "create_federation" + ] + }, + "DeleteFederation": { + "methods": [ + "delete_federation" + ] + }, + "GetFederation": { + "methods": [ + "get_federation" + ] + }, + "ListFederations": { + "methods": [ + "list_federations" + ] + }, + "UpdateFederation": { + "methods": [ + "update_federation" + ] + } + } + }, + "grpc-async": { + "libraryClient": "DataprocMetastoreFederationAsyncClient", + "rpcs": { + "CreateFederation": { + "methods": [ + "create_federation" + ] + }, + "DeleteFederation": { + "methods": [ + "delete_federation" + ] + }, + "GetFederation": { + "methods": [ + "get_federation" + ] + }, + "ListFederations": { + "methods": [ + "list_federations" + ] + }, + "UpdateFederation": { + "methods": [ + "update_federation" + ] + } + } + } + } } } } diff --git a/google/cloud/metastore_v1/gapic_version.py b/google/cloud/metastore_v1/gapic_version.py new file mode 100644 index 0000000..f033c61 --- /dev/null +++ b/google/cloud/metastore_v1/gapic_version.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +__version__ = "1.7.0" # {x-release-please-version} diff --git a/google/cloud/metastore_v1/py.typed b/google/cloud/metastore_v1/py.typed index 72edca0..f949c43 100644 --- a/google/cloud/metastore_v1/py.typed +++ b/google/cloud/metastore_v1/py.typed @@ -1,2 +1,2 @@ # Marker file for PEP 561. -# The google-cloud-metastore package uses inline types. +# The google-cloud-dataproc-metastore package uses inline types. diff --git a/google/cloud/metastore_v1/services/dataproc_metastore/async_client.py b/google/cloud/metastore_v1/services/dataproc_metastore/async_client.py index fe6b157..4897899 100644 --- a/google/cloud/metastore_v1/services/dataproc_metastore/async_client.py +++ b/google/cloud/metastore_v1/services/dataproc_metastore/async_client.py @@ -16,7 +16,17 @@ from collections import OrderedDict import functools import re -from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, +) from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1 @@ -24,7 +34,8 @@ from google.api_core.client_options import ClientOptions from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore -import pkg_resources + +from google.cloud.metastore_v1 import gapic_version as package_version try: OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] @@ -85,6 +96,8 @@ class DataprocMetastoreAsyncClient: parse_network_path = staticmethod(DataprocMetastoreClient.parse_network_path) service_path = staticmethod(DataprocMetastoreClient.service_path) parse_service_path = staticmethod(DataprocMetastoreClient.parse_service_path) + subnetwork_path = staticmethod(DataprocMetastoreClient.subnetwork_path) + parse_subnetwork_path = staticmethod(DataprocMetastoreClient.parse_subnetwork_path) common_billing_account_path = staticmethod( DataprocMetastoreClient.common_billing_account_path ) @@ -195,9 +208,9 @@ def transport(self) -> DataprocMetastoreTransport: def __init__( self, *, - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, transport: Union[str, DataprocMetastoreTransport] = "grpc_asyncio", - client_options: ClientOptions = None, + client_options: Optional[ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiates the dataproc metastore client. @@ -241,11 +254,11 @@ def __init__( async def list_services( self, - request: Union[metastore.ListServicesRequest, dict] = None, + request: Optional[Union[metastore.ListServicesRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListServicesAsyncPager: r"""Lists services in a project and location. @@ -278,7 +291,7 @@ async def sample_list_services(): print(response) Args: - request (Union[google.cloud.metastore_v1.types.ListServicesRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.ListServicesRequest, dict]]): The request object. Request message for [DataprocMetastore.ListServices][google.cloud.metastore.v1.DataprocMetastore.ListServices]. parent (:class:`str`): @@ -358,11 +371,11 @@ async def sample_list_services(): async def get_service( self, - request: Union[metastore.GetServiceRequest, dict] = None, + request: Optional[Union[metastore.GetServiceRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> metastore.Service: r"""Gets the details of a single service. @@ -394,7 +407,7 @@ async def sample_get_service(): print(response) Args: - request (Union[google.cloud.metastore_v1.types.GetServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.GetServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.GetService][google.cloud.metastore.v1.DataprocMetastore.GetService]. name (:class:`str`): @@ -462,13 +475,13 @@ async def sample_get_service(): async def create_service( self, - request: Union[metastore.CreateServiceRequest, dict] = None, + request: Optional[Union[metastore.CreateServiceRequest, dict]] = None, *, - parent: str = None, - service: metastore.Service = None, - service_id: str = None, + parent: Optional[str] = None, + service: Optional[metastore.Service] = None, + service_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Creates a metastore service in a project and @@ -500,13 +513,13 @@ async def sample_create_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1.types.CreateServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.CreateServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.CreateService][google.cloud.metastore.v1.DataprocMetastore.CreateService]. parent (:class:`str`): @@ -613,12 +626,12 @@ async def sample_create_service(): async def update_service( self, - request: Union[metastore.UpdateServiceRequest, dict] = None, + request: Optional[Union[metastore.UpdateServiceRequest, dict]] = None, *, - service: metastore.Service = None, - update_mask: field_mask_pb2.FieldMask = None, + service: Optional[metastore.Service] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Updates the parameters of a single service. @@ -647,13 +660,13 @@ async def sample_update_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1.types.UpdateServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.UpdateServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.UpdateService][google.cloud.metastore.v1.DataprocMetastore.UpdateService]. service (:class:`google.cloud.metastore_v1.types.Service`): @@ -748,11 +761,11 @@ async def sample_update_service(): async def delete_service( self, - request: Union[metastore.DeleteServiceRequest, dict] = None, + request: Optional[Union[metastore.DeleteServiceRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Deletes a single service. @@ -782,13 +795,13 @@ async def sample_delete_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1.types.DeleteServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.DeleteServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.DeleteService][google.cloud.metastore.v1.DataprocMetastore.DeleteService]. name (:class:`str`): @@ -874,11 +887,11 @@ async def sample_delete_service(): async def list_metadata_imports( self, - request: Union[metastore.ListMetadataImportsRequest, dict] = None, + request: Optional[Union[metastore.ListMetadataImportsRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListMetadataImportsAsyncPager: r"""Lists imports in a service. @@ -911,7 +924,7 @@ async def sample_list_metadata_imports(): print(response) Args: - request (Union[google.cloud.metastore_v1.types.ListMetadataImportsRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.ListMetadataImportsRequest, dict]]): The request object. Request message for [DataprocMetastore.ListMetadataImports][google.cloud.metastore.v1.DataprocMetastore.ListMetadataImports]. parent (:class:`str`): @@ -991,11 +1004,11 @@ async def sample_list_metadata_imports(): async def get_metadata_import( self, - request: Union[metastore.GetMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.GetMetadataImportRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> metastore.MetadataImport: r"""Gets details of a single import. @@ -1027,7 +1040,7 @@ async def sample_get_metadata_import(): print(response) Args: - request (Union[google.cloud.metastore_v1.types.GetMetadataImportRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.GetMetadataImportRequest, dict]]): The request object. Request message for [DataprocMetastore.GetMetadataImport][google.cloud.metastore.v1.DataprocMetastore.GetMetadataImport]. name (:class:`str`): @@ -1095,13 +1108,13 @@ async def sample_get_metadata_import(): async def create_metadata_import( self, - request: Union[metastore.CreateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.CreateMetadataImportRequest, dict]] = None, *, - parent: str = None, - metadata_import: metastore.MetadataImport = None, - metadata_import_id: str = None, + parent: Optional[str] = None, + metadata_import: Optional[metastore.MetadataImport] = None, + metadata_import_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Creates a new MetadataImport in a given project and @@ -1133,13 +1146,13 @@ async def sample_create_metadata_import(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1.types.CreateMetadataImportRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.CreateMetadataImportRequest, dict]]): The request object. Request message for [DataprocMetastore.CreateMetadataImport][google.cloud.metastore.v1.DataprocMetastore.CreateMetadataImport]. parent (:class:`str`): @@ -1245,12 +1258,12 @@ async def sample_create_metadata_import(): async def update_metadata_import( self, - request: Union[metastore.UpdateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.UpdateMetadataImportRequest, dict]] = None, *, - metadata_import: metastore.MetadataImport = None, - update_mask: field_mask_pb2.FieldMask = None, + metadata_import: Optional[metastore.MetadataImport] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Updates a single import. @@ -1281,13 +1294,13 @@ async def sample_update_metadata_import(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1.types.UpdateMetadataImportRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.UpdateMetadataImportRequest, dict]]): The request object. Request message for [DataprocMetastore.UpdateMetadataImport][google.cloud.metastore.v1.DataprocMetastore.UpdateMetadataImport]. metadata_import (:class:`google.cloud.metastore_v1.types.MetadataImport`): @@ -1382,10 +1395,10 @@ async def sample_update_metadata_import(): async def export_metadata( self, - request: Union[metastore.ExportMetadataRequest, dict] = None, + request: Optional[Union[metastore.ExportMetadataRequest, dict]] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Exports metadata from a service. @@ -1416,13 +1429,13 @@ async def sample_export_metadata(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1.types.ExportMetadataRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.ExportMetadataRequest, dict]]): The request object. Request message for [DataprocMetastore.ExportMetadata][google.cloud.metastore.v1.DataprocMetastore.ExportMetadata]. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1478,12 +1491,12 @@ async def sample_export_metadata(): async def restore_service( self, - request: Union[metastore.RestoreServiceRequest, dict] = None, + request: Optional[Union[metastore.RestoreServiceRequest, dict]] = None, *, - service: str = None, - backup: str = None, + service: Optional[str] = None, + backup: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Restores a service from a backup. @@ -1514,13 +1527,13 @@ async def sample_restore_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1.types.RestoreServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.RestoreServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.Restore][]. service (:class:`str`): @@ -1610,11 +1623,11 @@ async def sample_restore_service(): async def list_backups( self, - request: Union[metastore.ListBackupsRequest, dict] = None, + request: Optional[Union[metastore.ListBackupsRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListBackupsAsyncPager: r"""Lists backups in a service. @@ -1647,7 +1660,7 @@ async def sample_list_backups(): print(response) Args: - request (Union[google.cloud.metastore_v1.types.ListBackupsRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.ListBackupsRequest, dict]]): The request object. Request message for [DataprocMetastore.ListBackups][google.cloud.metastore.v1.DataprocMetastore.ListBackups]. parent (:class:`str`): @@ -1727,11 +1740,11 @@ async def sample_list_backups(): async def get_backup( self, - request: Union[metastore.GetBackupRequest, dict] = None, + request: Optional[Union[metastore.GetBackupRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> metastore.Backup: r"""Gets details of a single backup. @@ -1763,7 +1776,7 @@ async def sample_get_backup(): print(response) Args: - request (Union[google.cloud.metastore_v1.types.GetBackupRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.GetBackupRequest, dict]]): The request object. Request message for [DataprocMetastore.GetBackup][google.cloud.metastore.v1.DataprocMetastore.GetBackup]. name (:class:`str`): @@ -1829,13 +1842,13 @@ async def sample_get_backup(): async def create_backup( self, - request: Union[metastore.CreateBackupRequest, dict] = None, + request: Optional[Union[metastore.CreateBackupRequest, dict]] = None, *, - parent: str = None, - backup: metastore.Backup = None, - backup_id: str = None, + parent: Optional[str] = None, + backup: Optional[metastore.Backup] = None, + backup_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Creates a new backup in a given project and location. @@ -1866,13 +1879,13 @@ async def sample_create_backup(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1.types.CreateBackupRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.CreateBackupRequest, dict]]): The request object. Request message for [DataprocMetastore.CreateBackup][google.cloud.metastore.v1.DataprocMetastore.CreateBackup]. parent (:class:`str`): @@ -1976,11 +1989,11 @@ async def sample_create_backup(): async def delete_backup( self, - request: Union[metastore.DeleteBackupRequest, dict] = None, + request: Optional[Union[metastore.DeleteBackupRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Deletes a single backup. @@ -2010,13 +2023,13 @@ async def sample_delete_backup(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1.types.DeleteBackupRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.DeleteBackupRequest, dict]]): The request object. Request message for [DataprocMetastore.DeleteBackup][google.cloud.metastore.v1.DataprocMetastore.DeleteBackup]. name (:class:`str`): @@ -2107,14 +2120,9 @@ async def __aexit__(self, exc_type, exc, tb): await self.transport.close() -try: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution( - "google-cloud-metastore", - ).version, - ) -except pkg_resources.DistributionNotFound: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) __all__ = ("DataprocMetastoreAsyncClient",) diff --git a/google/cloud/metastore_v1/services/dataproc_metastore/client.py b/google/cloud/metastore_v1/services/dataproc_metastore/client.py index 435d582..aebc29d 100644 --- a/google/cloud/metastore_v1/services/dataproc_metastore/client.py +++ b/google/cloud/metastore_v1/services/dataproc_metastore/client.py @@ -16,7 +16,18 @@ from collections import OrderedDict import os import re -from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, + cast, +) from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions @@ -27,7 +38,8 @@ from google.auth.transport import mtls # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore from google.oauth2 import service_account # type: ignore -import pkg_resources + +from google.cloud.metastore_v1 import gapic_version as package_version try: OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] @@ -64,7 +76,7 @@ class DataprocMetastoreClientMeta(type): def get_transport_class( cls, - label: str = None, + label: Optional[str] = None, ) -> Type[DataprocMetastoreTransport]: """Returns an appropriate transport class. @@ -280,6 +292,28 @@ def parse_service_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def subnetwork_path( + project: str, + region: str, + subnetwork: str, + ) -> str: + """Returns a fully-qualified subnetwork string.""" + return "projects/{project}/regions/{region}/subnetworks/{subnetwork}".format( + project=project, + region=region, + subnetwork=subnetwork, + ) + + @staticmethod + def parse_subnetwork_path(path: str) -> Dict[str, str]: + """Parses a subnetwork path into its component segments.""" + m = re.match( + r"^projects/(?P.+?)/regions/(?P.+?)/subnetworks/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def common_billing_account_path( billing_account: str, @@ -428,8 +462,8 @@ def __init__( self, *, credentials: Optional[ga_credentials.Credentials] = None, - transport: Union[str, DataprocMetastoreTransport, None] = None, - client_options: Optional[client_options_lib.ClientOptions] = None, + transport: Optional[Union[str, DataprocMetastoreTransport]] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiates the dataproc metastore client. @@ -443,7 +477,7 @@ def __init__( transport (Union[str, DataprocMetastoreTransport]): The transport to use. If set to None, a transport is chosen automatically. - client_options (google.api_core.client_options.ClientOptions): Custom options for the + client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): Custom options for the client. It won't take effect if a ``transport`` instance is provided. (1) The ``api_endpoint`` property can be used to override the default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT @@ -473,6 +507,7 @@ def __init__( client_options = client_options_lib.from_dict(client_options) if client_options is None: client_options = client_options_lib.ClientOptions() + client_options = cast(client_options_lib.ClientOptions, client_options) api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source( client_options @@ -525,11 +560,11 @@ def __init__( def list_services( self, - request: Union[metastore.ListServicesRequest, dict] = None, + request: Optional[Union[metastore.ListServicesRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListServicesPager: r"""Lists services in a project and location. @@ -642,11 +677,11 @@ def sample_list_services(): def get_service( self, - request: Union[metastore.GetServiceRequest, dict] = None, + request: Optional[Union[metastore.GetServiceRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> metastore.Service: r"""Gets the details of a single service. @@ -746,13 +781,13 @@ def sample_get_service(): def create_service( self, - request: Union[metastore.CreateServiceRequest, dict] = None, + request: Optional[Union[metastore.CreateServiceRequest, dict]] = None, *, - parent: str = None, - service: metastore.Service = None, - service_id: str = None, + parent: Optional[str] = None, + service: Optional[metastore.Service] = None, + service_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Creates a metastore service in a project and @@ -897,12 +932,12 @@ def sample_create_service(): def update_service( self, - request: Union[metastore.UpdateServiceRequest, dict] = None, + request: Optional[Union[metastore.UpdateServiceRequest, dict]] = None, *, - service: metastore.Service = None, - update_mask: field_mask_pb2.FieldMask = None, + service: Optional[metastore.Service] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Updates the parameters of a single service. @@ -1032,11 +1067,11 @@ def sample_update_service(): def delete_service( self, - request: Union[metastore.DeleteServiceRequest, dict] = None, + request: Optional[Union[metastore.DeleteServiceRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Deletes a single service. @@ -1158,11 +1193,11 @@ def sample_delete_service(): def list_metadata_imports( self, - request: Union[metastore.ListMetadataImportsRequest, dict] = None, + request: Optional[Union[metastore.ListMetadataImportsRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListMetadataImportsPager: r"""Lists imports in a service. @@ -1275,11 +1310,11 @@ def sample_list_metadata_imports(): def get_metadata_import( self, - request: Union[metastore.GetMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.GetMetadataImportRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> metastore.MetadataImport: r"""Gets details of a single import. @@ -1379,13 +1414,13 @@ def sample_get_metadata_import(): def create_metadata_import( self, - request: Union[metastore.CreateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.CreateMetadataImportRequest, dict]] = None, *, - parent: str = None, - metadata_import: metastore.MetadataImport = None, - metadata_import_id: str = None, + parent: Optional[str] = None, + metadata_import: Optional[metastore.MetadataImport] = None, + metadata_import_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Creates a new MetadataImport in a given project and @@ -1529,12 +1564,12 @@ def sample_create_metadata_import(): def update_metadata_import( self, - request: Union[metastore.UpdateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.UpdateMetadataImportRequest, dict]] = None, *, - metadata_import: metastore.MetadataImport = None, - update_mask: field_mask_pb2.FieldMask = None, + metadata_import: Optional[metastore.MetadataImport] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Updates a single import. @@ -1666,10 +1701,10 @@ def sample_update_metadata_import(): def export_metadata( self, - request: Union[metastore.ExportMetadataRequest, dict] = None, + request: Optional[Union[metastore.ExportMetadataRequest, dict]] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Exports metadata from a service. @@ -1763,12 +1798,12 @@ def sample_export_metadata(): def restore_service( self, - request: Union[metastore.RestoreServiceRequest, dict] = None, + request: Optional[Union[metastore.RestoreServiceRequest, dict]] = None, *, - service: str = None, - backup: str = None, + service: Optional[str] = None, + backup: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Restores a service from a backup. @@ -1895,11 +1930,11 @@ def sample_restore_service(): def list_backups( self, - request: Union[metastore.ListBackupsRequest, dict] = None, + request: Optional[Union[metastore.ListBackupsRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListBackupsPager: r"""Lists backups in a service. @@ -2012,11 +2047,11 @@ def sample_list_backups(): def get_backup( self, - request: Union[metastore.GetBackupRequest, dict] = None, + request: Optional[Union[metastore.GetBackupRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> metastore.Backup: r"""Gets details of a single backup. @@ -2114,13 +2149,13 @@ def sample_get_backup(): def create_backup( self, - request: Union[metastore.CreateBackupRequest, dict] = None, + request: Optional[Union[metastore.CreateBackupRequest, dict]] = None, *, - parent: str = None, - backup: metastore.Backup = None, - backup_id: str = None, + parent: Optional[str] = None, + backup: Optional[metastore.Backup] = None, + backup_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Creates a new backup in a given project and location. @@ -2261,11 +2296,11 @@ def sample_create_backup(): def delete_backup( self, - request: Union[metastore.DeleteBackupRequest, dict] = None, + request: Optional[Union[metastore.DeleteBackupRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Deletes a single backup. @@ -2399,14 +2434,9 @@ def __exit__(self, type, value, traceback): self.transport.close() -try: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution( - "google-cloud-metastore", - ).version, - ) -except pkg_resources.DistributionNotFound: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) __all__ = ("DataprocMetastoreClient",) diff --git a/google/cloud/metastore_v1/services/dataproc_metastore/transports/base.py b/google/cloud/metastore_v1/services/dataproc_metastore/transports/base.py index 86474de..0a9841e 100644 --- a/google/cloud/metastore_v1/services/dataproc_metastore/transports/base.py +++ b/google/cloud/metastore_v1/services/dataproc_metastore/transports/base.py @@ -24,18 +24,13 @@ from google.auth import credentials as ga_credentials # type: ignore from google.longrunning import operations_pb2 # type: ignore from google.oauth2 import service_account # type: ignore -import pkg_resources +from google.cloud.metastore_v1 import gapic_version as package_version from google.cloud.metastore_v1.types import metastore -try: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution( - "google-cloud-metastore", - ).version, - ) -except pkg_resources.DistributionNotFound: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) class DataprocMetastoreTransport(abc.ABC): @@ -49,7 +44,7 @@ def __init__( self, *, host: str = DEFAULT_HOST, - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, diff --git a/google/cloud/metastore_v1/services/dataproc_metastore/transports/grpc.py b/google/cloud/metastore_v1/services/dataproc_metastore/transports/grpc.py index 6c09fa5..7a38189 100644 --- a/google/cloud/metastore_v1/services/dataproc_metastore/transports/grpc.py +++ b/google/cloud/metastore_v1/services/dataproc_metastore/transports/grpc.py @@ -68,14 +68,14 @@ def __init__( self, *, host: str = "metastore.googleapis.com", - credentials: ga_credentials.Credentials = None, - credentials_file: str = None, - scopes: Sequence[str] = None, - channel: grpc.Channel = None, - api_mtls_endpoint: str = None, - client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, - ssl_channel_credentials: grpc.ChannelCredentials = None, - client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: Optional[grpc.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, @@ -203,8 +203,8 @@ def __init__( def create_channel( cls, host: str = "metastore.googleapis.com", - credentials: ga_credentials.Credentials = None, - credentials_file: str = None, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, **kwargs, diff --git a/google/cloud/metastore_v1/services/dataproc_metastore/transports/grpc_asyncio.py b/google/cloud/metastore_v1/services/dataproc_metastore/transports/grpc_asyncio.py index f16a3ba..7ed66b3 100644 --- a/google/cloud/metastore_v1/services/dataproc_metastore/transports/grpc_asyncio.py +++ b/google/cloud/metastore_v1/services/dataproc_metastore/transports/grpc_asyncio.py @@ -70,7 +70,7 @@ class DataprocMetastoreGrpcAsyncIOTransport(DataprocMetastoreTransport): def create_channel( cls, host: str = "metastore.googleapis.com", - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, @@ -113,15 +113,15 @@ def __init__( self, *, host: str = "metastore.googleapis.com", - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, - channel: aio.Channel = None, - api_mtls_endpoint: str = None, - client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, - ssl_channel_credentials: grpc.ChannelCredentials = None, - client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, - quota_project_id=None, + channel: Optional[aio.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, api_audience: Optional[str] = None, diff --git a/google/cloud/metastore_v1/services/dataproc_metastore_federation/__init__.py b/google/cloud/metastore_v1/services/dataproc_metastore_federation/__init__.py new file mode 100644 index 0000000..6cb70e0 --- /dev/null +++ b/google/cloud/metastore_v1/services/dataproc_metastore_federation/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from .async_client import DataprocMetastoreFederationAsyncClient +from .client import DataprocMetastoreFederationClient + +__all__ = ( + "DataprocMetastoreFederationClient", + "DataprocMetastoreFederationAsyncClient", +) diff --git a/google/cloud/metastore_v1/services/dataproc_metastore_federation/async_client.py b/google/cloud/metastore_v1/services/dataproc_metastore_federation/async_client.py new file mode 100644 index 0000000..0f98726 --- /dev/null +++ b/google/cloud/metastore_v1/services/dataproc_metastore_federation/async_client.py @@ -0,0 +1,898 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from collections import OrderedDict +import functools +import re +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, +) + +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.client_options import ClientOptions +from google.auth import credentials as ga_credentials # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.cloud.metastore_v1 import gapic_version as package_version + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore + +from google.api_core import operation # type: ignore +from google.api_core import operation_async # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore + +from google.cloud.metastore_v1.services.dataproc_metastore_federation import pagers +from google.cloud.metastore_v1.types import metastore, metastore_federation + +from .client import DataprocMetastoreFederationClient +from .transports.base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport +from .transports.grpc_asyncio import DataprocMetastoreFederationGrpcAsyncIOTransport + + +class DataprocMetastoreFederationAsyncClient: + """Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + """ + + _client: DataprocMetastoreFederationClient + + DEFAULT_ENDPOINT = DataprocMetastoreFederationClient.DEFAULT_ENDPOINT + DEFAULT_MTLS_ENDPOINT = DataprocMetastoreFederationClient.DEFAULT_MTLS_ENDPOINT + + federation_path = staticmethod(DataprocMetastoreFederationClient.federation_path) + parse_federation_path = staticmethod( + DataprocMetastoreFederationClient.parse_federation_path + ) + common_billing_account_path = staticmethod( + DataprocMetastoreFederationClient.common_billing_account_path + ) + parse_common_billing_account_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_billing_account_path + ) + common_folder_path = staticmethod( + DataprocMetastoreFederationClient.common_folder_path + ) + parse_common_folder_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_folder_path + ) + common_organization_path = staticmethod( + DataprocMetastoreFederationClient.common_organization_path + ) + parse_common_organization_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_organization_path + ) + common_project_path = staticmethod( + DataprocMetastoreFederationClient.common_project_path + ) + parse_common_project_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_project_path + ) + common_location_path = staticmethod( + DataprocMetastoreFederationClient.common_location_path + ) + parse_common_location_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_location_path + ) + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationAsyncClient: The constructed client. + """ + return DataprocMetastoreFederationClient.from_service_account_info.__func__(DataprocMetastoreFederationAsyncClient, info, *args, **kwargs) # type: ignore + + @classmethod + def from_service_account_file(cls, filename: str, *args, **kwargs): + """Creates an instance of this client using the provided credentials + file. + + Args: + filename (str): The path to the service account private key json + file. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationAsyncClient: The constructed client. + """ + return DataprocMetastoreFederationClient.from_service_account_file.__func__(DataprocMetastoreFederationAsyncClient, filename, *args, **kwargs) # type: ignore + + from_service_account_json = from_service_account_file + + @classmethod + def get_mtls_endpoint_and_cert_source( + cls, client_options: Optional[ClientOptions] = None + ): + """Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variabel is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + return DataprocMetastoreFederationClient.get_mtls_endpoint_and_cert_source(client_options) # type: ignore + + @property + def transport(self) -> DataprocMetastoreFederationTransport: + """Returns the transport used by the client instance. + + Returns: + DataprocMetastoreFederationTransport: The transport used by the client instance. + """ + return self._client.transport + + get_transport_class = functools.partial( + type(DataprocMetastoreFederationClient).get_transport_class, + type(DataprocMetastoreFederationClient), + ) + + def __init__( + self, + *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Union[str, DataprocMetastoreFederationTransport] = "grpc_asyncio", + client_options: Optional[ClientOptions] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the dataproc metastore federation client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Union[str, ~.DataprocMetastoreFederationTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + client_options (ClientOptions): Custom options for the client. It + won't take effect if a ``transport`` instance is provided. + (1) The ``api_endpoint`` property can be used to override the + default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + + Raises: + google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + creation failed for any reason. + """ + self._client = DataprocMetastoreFederationClient( + credentials=credentials, + transport=transport, + client_options=client_options, + client_info=client_info, + ) + + async def list_federations( + self, + request: Optional[ + Union[metastore_federation.ListFederationsRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListFederationsAsyncPager: + r"""Lists federations in a project and location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1 + + async def sample_list_federations(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1.types.ListFederationsRequest, dict]]): + The request object. Request message for ListFederations. + parent (:class:`str`): + Required. The relative resource name of the location of + metastore federations to list, in the following form: + ``projects/{project_number}/locations/{location_id}``. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1.services.dataproc_metastore_federation.pagers.ListFederationsAsyncPager: + Response message for ListFederations + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.ListFederationsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_federations, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListFederationsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_federation( + self, + request: Optional[ + Union[metastore_federation.GetFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> metastore_federation.Federation: + r"""Gets the details of a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1 + + async def sample_get_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = await client.get_federation(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1.types.GetFederationRequest, dict]]): + The request object. Request message for GetFederation. + name (:class:`str`): + Required. The relative resource name of the metastore + federation to retrieve, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1.types.Federation: + Represents a federation of multiple + backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.GetFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def create_federation( + self, + request: Optional[ + Union[metastore_federation.CreateFederationRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + federation: Optional[metastore_federation.Federation] = None, + federation_id: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Creates a metastore federation in a project and + location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1 + + async def sample_create_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1.types.CreateFederationRequest, dict]]): + The request object. Request message for + CreateFederation. + parent (:class:`str`): + Required. The relative resource name of the location in + which to create a federation service, in the following + form: + + ``projects/{project_number}/locations/{location_id}``. + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation (:class:`google.cloud.metastore_v1.types.Federation`): + Required. The Metastore Federation to create. The + ``name`` field is ignored. The ID of the created + metastore federation must be provided in the request's + ``federation_id`` field. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation_id (:class:`str`): + Required. The ID of the metastore + federation, which is used as the final + component of the metastore federation's + name. + This value must be between 2 and 63 + characters long inclusive, begin with a + letter, end with a letter or number, and + consist of alpha-numeric ASCII + characters or hyphens. + + This corresponds to the ``federation_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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, federation, federation_id]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.CreateFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if federation is not None: + request.federation = federation + if federation_id is not None: + request.federation_id = federation_id + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.create_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + async def update_federation( + self, + request: Optional[ + Union[metastore_federation.UpdateFederationRequest, dict] + ] = None, + *, + federation: Optional[metastore_federation.Federation] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Updates the fields of a federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1 + + async def sample_update_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1.types.UpdateFederationRequest, dict]]): + The request object. Request message for + UpdateFederation. + federation (:class:`google.cloud.metastore_v1.types.Federation`): + Required. The metastore federation to update. The server + only merges fields in the service if they are specified + in ``update_mask``. + + The metastore federation's ``name`` field is used to + identify the metastore service to be updated. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): + Required. A field mask used to specify the fields to be + overwritten in the metastore federation resource by the + update. Fields specified in the ``update_mask`` are + relative to the resource (not to the full request). A + field is overwritten if it is in the mask. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([federation, update_mask]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.UpdateFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if federation is not None: + request.federation = federation + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("federation.name", request.federation.name),) + ), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + async def delete_federation( + self, + request: Optional[ + Union[metastore_federation.DeleteFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Deletes a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1 + + async def sample_delete_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1.types.DeleteFederationRequest, dict]]): + The request object. Request message for + DeleteFederation. + name (:class:`str`): + Required. The relative resource name of the metastore + federation to delete, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be :class:`google.protobuf.empty_pb2.Empty` A generic empty message that you can re-use to avoid defining duplicated + empty messages in your APIs. A typical example is to + use it as the request or the response type of an API + method. For instance: + + service Foo { + rpc Bar(google.protobuf.Empty) returns + (google.protobuf.Empty); + + } + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.DeleteFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.delete_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + empty_pb2.Empty, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + async def __aenter__(self): + return self + + async def __aexit__(self, exc_type, exc, tb): + await self.transport.close() + + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) + + +__all__ = ("DataprocMetastoreFederationAsyncClient",) diff --git a/google/cloud/metastore_v1/services/dataproc_metastore_federation/client.py b/google/cloud/metastore_v1/services/dataproc_metastore_federation/client.py new file mode 100644 index 0000000..61adde0 --- /dev/null +++ b/google/cloud/metastore_v1/services/dataproc_metastore_federation/client.py @@ -0,0 +1,1129 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from collections import OrderedDict +import os +import re +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, + cast, +) + +from google.api_core import client_options as client_options_lib +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.auth import credentials as ga_credentials # type: ignore +from google.auth.exceptions import MutualTLSChannelError # type: ignore +from google.auth.transport import mtls # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.cloud.metastore_v1 import gapic_version as package_version + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore + +from google.api_core import operation # type: ignore +from google.api_core import operation_async # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore + +from google.cloud.metastore_v1.services.dataproc_metastore_federation import pagers +from google.cloud.metastore_v1.types import metastore, metastore_federation + +from .transports.base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport +from .transports.grpc import DataprocMetastoreFederationGrpcTransport +from .transports.grpc_asyncio import DataprocMetastoreFederationGrpcAsyncIOTransport + + +class DataprocMetastoreFederationClientMeta(type): + """Metaclass for the DataprocMetastoreFederation client. + + This provides class-level methods for building and retrieving + support objects (e.g. transport) without polluting the client instance + objects. + """ + + _transport_registry = ( + OrderedDict() + ) # type: Dict[str, Type[DataprocMetastoreFederationTransport]] + _transport_registry["grpc"] = DataprocMetastoreFederationGrpcTransport + _transport_registry[ + "grpc_asyncio" + ] = DataprocMetastoreFederationGrpcAsyncIOTransport + + def get_transport_class( + cls, + label: Optional[str] = None, + ) -> Type[DataprocMetastoreFederationTransport]: + """Returns an appropriate transport class. + + Args: + label: The name of the desired transport. If none is + provided, then the first transport in the registry is used. + + Returns: + The transport class to use. + """ + # If a specific transport is requested, return that one. + if label: + return cls._transport_registry[label] + + # No transport is requested; return the default (that is, the first one + # in the dictionary). + return next(iter(cls._transport_registry.values())) + + +class DataprocMetastoreFederationClient( + metaclass=DataprocMetastoreFederationClientMeta +): + """Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + """ + + @staticmethod + def _get_default_mtls_endpoint(api_endpoint): + """Converts api endpoint to mTLS endpoint. + + Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to + "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. + Args: + api_endpoint (Optional[str]): the api endpoint to convert. + Returns: + str: converted mTLS api endpoint. + """ + if not api_endpoint: + return api_endpoint + + mtls_endpoint_re = re.compile( + r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?" + ) + + m = mtls_endpoint_re.match(api_endpoint) + name, mtls, sandbox, googledomain = m.groups() + if mtls or not googledomain: + return api_endpoint + + if sandbox: + return api_endpoint.replace( + "sandbox.googleapis.com", "mtls.sandbox.googleapis.com" + ) + + return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") + + DEFAULT_ENDPOINT = "metastore.googleapis.com" + DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore + DEFAULT_ENDPOINT + ) + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_info(info) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + @classmethod + def from_service_account_file(cls, filename: str, *args, **kwargs): + """Creates an instance of this client using the provided credentials + file. + + Args: + filename (str): The path to the service account private key json + file. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_file(filename) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + from_service_account_json = from_service_account_file + + @property + def transport(self) -> DataprocMetastoreFederationTransport: + """Returns the transport used by the client instance. + + Returns: + DataprocMetastoreFederationTransport: The transport used by the client + instance. + """ + return self._transport + + @staticmethod + def federation_path( + project: str, + location: str, + federation: str, + ) -> str: + """Returns a fully-qualified federation string.""" + return ( + "projects/{project}/locations/{location}/federations/{federation}".format( + project=project, + location=location, + federation=federation, + ) + ) + + @staticmethod + def parse_federation_path(path: str) -> Dict[str, str]: + """Parses a federation path into its component segments.""" + m = re.match( + r"^projects/(?P.+?)/locations/(?P.+?)/federations/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def common_billing_account_path( + billing_account: str, + ) -> str: + """Returns a fully-qualified billing_account string.""" + return "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + + @staticmethod + def parse_common_billing_account_path(path: str) -> Dict[str, str]: + """Parse a billing_account path into its component segments.""" + m = re.match(r"^billingAccounts/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_folder_path( + folder: str, + ) -> str: + """Returns a fully-qualified folder string.""" + return "folders/{folder}".format( + folder=folder, + ) + + @staticmethod + def parse_common_folder_path(path: str) -> Dict[str, str]: + """Parse a folder path into its component segments.""" + m = re.match(r"^folders/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_organization_path( + organization: str, + ) -> str: + """Returns a fully-qualified organization string.""" + return "organizations/{organization}".format( + organization=organization, + ) + + @staticmethod + def parse_common_organization_path(path: str) -> Dict[str, str]: + """Parse a organization path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_project_path( + project: str, + ) -> str: + """Returns a fully-qualified project string.""" + return "projects/{project}".format( + project=project, + ) + + @staticmethod + def parse_common_project_path(path: str) -> Dict[str, str]: + """Parse a project path into its component segments.""" + m = re.match(r"^projects/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_location_path( + project: str, + location: str, + ) -> str: + """Returns a fully-qualified location string.""" + return "projects/{project}/locations/{location}".format( + project=project, + location=location, + ) + + @staticmethod + def parse_common_location_path(path: str) -> Dict[str, str]: + """Parse a location path into its component segments.""" + m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @classmethod + def get_mtls_endpoint_and_cert_source( + cls, client_options: Optional[client_options_lib.ClientOptions] = None + ): + """Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variabel is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + if client_options is None: + client_options = client_options_lib.ClientOptions() + use_client_cert = os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") + use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") + if use_client_cert not in ("true", "false"): + raise ValueError( + "Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`" + ) + if use_mtls_endpoint not in ("auto", "never", "always"): + raise MutualTLSChannelError( + "Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`" + ) + + # Figure out the client cert source to use. + client_cert_source = None + if use_client_cert == "true": + if client_options.client_cert_source: + client_cert_source = client_options.client_cert_source + elif mtls.has_default_client_cert_source(): + client_cert_source = mtls.default_client_cert_source() + + # Figure out which api endpoint to use. + if client_options.api_endpoint is not None: + api_endpoint = client_options.api_endpoint + elif use_mtls_endpoint == "always" or ( + use_mtls_endpoint == "auto" and client_cert_source + ): + api_endpoint = cls.DEFAULT_MTLS_ENDPOINT + else: + api_endpoint = cls.DEFAULT_ENDPOINT + + return api_endpoint, client_cert_source + + def __init__( + self, + *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Optional[Union[str, DataprocMetastoreFederationTransport]] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the dataproc metastore federation client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Union[str, DataprocMetastoreFederationTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): Custom options for the + client. It won't take effect if a ``transport`` instance is provided. + (1) The ``api_endpoint`` property can be used to override the + default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + """ + if isinstance(client_options, dict): + client_options = client_options_lib.from_dict(client_options) + if client_options is None: + client_options = client_options_lib.ClientOptions() + client_options = cast(client_options_lib.ClientOptions, client_options) + + api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source( + client_options + ) + + api_key_value = getattr(client_options, "api_key", None) + if api_key_value and credentials: + raise ValueError( + "client_options.api_key and credentials are mutually exclusive" + ) + + # Save or instantiate the transport. + # Ordinarily, we provide the transport, but allowing a custom transport + # instance provides an extensibility point for unusual situations. + if isinstance(transport, DataprocMetastoreFederationTransport): + # transport is a DataprocMetastoreFederationTransport instance. + if credentials or client_options.credentials_file or api_key_value: + raise ValueError( + "When providing a transport instance, " + "provide its credentials directly." + ) + if client_options.scopes: + raise ValueError( + "When providing a transport instance, provide its scopes " + "directly." + ) + self._transport = transport + else: + import google.auth._default # type: ignore + + if api_key_value and hasattr( + google.auth._default, "get_api_key_credentials" + ): + credentials = google.auth._default.get_api_key_credentials( + api_key_value + ) + + Transport = type(self).get_transport_class(transport) + self._transport = Transport( + credentials=credentials, + credentials_file=client_options.credentials_file, + host=api_endpoint, + scopes=client_options.scopes, + client_cert_source_for_mtls=client_cert_source_func, + quota_project_id=client_options.quota_project_id, + client_info=client_info, + always_use_jwt_access=True, + api_audience=client_options.api_audience, + ) + + def list_federations( + self, + request: Optional[ + Union[metastore_federation.ListFederationsRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListFederationsPager: + r"""Lists federations in a project and location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1 + + def sample_list_federations(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.metastore_v1.types.ListFederationsRequest, dict]): + The request object. Request message for ListFederations. + parent (str): + Required. The relative resource name of the location of + metastore federations to list, in the following form: + ``projects/{project_number}/locations/{location_id}``. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1.services.dataproc_metastore_federation.pagers.ListFederationsPager: + Response message for ListFederations + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.ListFederationsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.ListFederationsRequest): + request = metastore_federation.ListFederationsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_federations] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListFederationsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_federation( + self, + request: Optional[ + Union[metastore_federation.GetFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> metastore_federation.Federation: + r"""Gets the details of a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1 + + def sample_get_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = client.get_federation(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1.types.GetFederationRequest, dict]): + The request object. Request message for GetFederation. + name (str): + Required. The relative resource name of the metastore + federation to retrieve, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1.types.Federation: + Represents a federation of multiple + backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.GetFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.GetFederationRequest): + request = metastore_federation.GetFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def create_federation( + self, + request: Optional[ + Union[metastore_federation.CreateFederationRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + federation: Optional[metastore_federation.Federation] = None, + federation_id: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Creates a metastore federation in a project and + location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1 + + def sample_create_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1.types.CreateFederationRequest, dict]): + The request object. Request message for + CreateFederation. + parent (str): + Required. The relative resource name of the location in + which to create a federation service, in the following + form: + + ``projects/{project_number}/locations/{location_id}``. + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation (google.cloud.metastore_v1.types.Federation): + Required. The Metastore Federation to create. The + ``name`` field is ignored. The ID of the created + metastore federation must be provided in the request's + ``federation_id`` field. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation_id (str): + Required. The ID of the metastore + federation, which is used as the final + component of the metastore federation's + name. + This value must be between 2 and 63 + characters long inclusive, begin with a + letter, end with a letter or number, and + consist of alpha-numeric ASCII + characters or hyphens. + + This corresponds to the ``federation_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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, federation, federation_id]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.CreateFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.CreateFederationRequest): + request = metastore_federation.CreateFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if federation is not None: + request.federation = federation + if federation_id is not None: + request.federation_id = federation_id + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.create_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + def update_federation( + self, + request: Optional[ + Union[metastore_federation.UpdateFederationRequest, dict] + ] = None, + *, + federation: Optional[metastore_federation.Federation] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Updates the fields of a federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1 + + def sample_update_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1.types.UpdateFederationRequest, dict]): + The request object. Request message for + UpdateFederation. + federation (google.cloud.metastore_v1.types.Federation): + Required. The metastore federation to update. The server + only merges fields in the service if they are specified + in ``update_mask``. + + The metastore federation's ``name`` field is used to + identify the metastore service to be updated. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + Required. A field mask used to specify the fields to be + overwritten in the metastore federation resource by the + update. Fields specified in the ``update_mask`` are + relative to the resource (not to the full request). A + field is overwritten if it is in the mask. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([federation, update_mask]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.UpdateFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.UpdateFederationRequest): + request = metastore_federation.UpdateFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if federation is not None: + request.federation = federation + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("federation.name", request.federation.name),) + ), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + def delete_federation( + self, + request: Optional[ + Union[metastore_federation.DeleteFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Deletes a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1 + + def sample_delete_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1.types.DeleteFederationRequest, dict]): + The request object. Request message for + DeleteFederation. + name (str): + Required. The relative resource name of the metastore + federation to delete, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be :class:`google.protobuf.empty_pb2.Empty` A generic empty message that you can re-use to avoid defining duplicated + empty messages in your APIs. A typical example is to + use it as the request or the response type of an API + method. For instance: + + service Foo { + rpc Bar(google.protobuf.Empty) returns + (google.protobuf.Empty); + + } + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.DeleteFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.DeleteFederationRequest): + request = metastore_federation.DeleteFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + empty_pb2.Empty, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + """Releases underlying transport's resources. + + .. warning:: + ONLY use as a context manager if the transport is NOT shared + with other clients! Exiting the with block will CLOSE the transport + and may cause errors in other clients! + """ + self.transport.close() + + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) + + +__all__ = ("DataprocMetastoreFederationClient",) diff --git a/google/cloud/metastore_v1/services/dataproc_metastore_federation/pagers.py b/google/cloud/metastore_v1/services/dataproc_metastore_federation/pagers.py new file mode 100644 index 0000000..b470b9b --- /dev/null +++ b/google/cloud/metastore_v1/services/dataproc_metastore_federation/pagers.py @@ -0,0 +1,157 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from typing import ( + Any, + AsyncIterator, + Awaitable, + Callable, + Iterator, + Optional, + Sequence, + Tuple, +) + +from google.cloud.metastore_v1.types import metastore_federation + + +class ListFederationsPager: + """A pager for iterating through ``list_federations`` requests. + + This class thinly wraps an initial + :class:`google.cloud.metastore_v1.types.ListFederationsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``federations`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListFederations`` requests and continue to iterate + through the ``federations`` field on the + corresponding responses. + + All the usual :class:`google.cloud.metastore_v1.types.ListFederationsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[..., metastore_federation.ListFederationsResponse], + request: metastore_federation.ListFederationsRequest, + response: metastore_federation.ListFederationsResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.metastore_v1.types.ListFederationsRequest): + The initial request object. + response (google.cloud.metastore_v1.types.ListFederationsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = metastore_federation.ListFederationsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[metastore_federation.ListFederationsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[metastore_federation.Federation]: + for page in self.pages: + yield from page.federations + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + +class ListFederationsAsyncPager: + """A pager for iterating through ``list_federations`` requests. + + This class thinly wraps an initial + :class:`google.cloud.metastore_v1.types.ListFederationsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``federations`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListFederations`` requests and continue to iterate + through the ``federations`` field on the + corresponding responses. + + All the usual :class:`google.cloud.metastore_v1.types.ListFederationsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[..., Awaitable[metastore_federation.ListFederationsResponse]], + request: metastore_federation.ListFederationsRequest, + response: metastore_federation.ListFederationsResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.metastore_v1.types.ListFederationsRequest): + The initial request object. + response (google.cloud.metastore_v1.types.ListFederationsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = metastore_federation.ListFederationsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages( + self, + ) -> AsyncIterator[metastore_federation.ListFederationsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + + def __aiter__(self) -> AsyncIterator[metastore_federation.Federation]: + async def async_generator(): + async for page in self.pages: + for response in page.federations: + yield response + + return async_generator() + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) diff --git a/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/__init__.py b/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/__init__.py new file mode 100644 index 0000000..7c7e978 --- /dev/null +++ b/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/__init__.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from collections import OrderedDict +from typing import Dict, Type + +from .base import DataprocMetastoreFederationTransport +from .grpc import DataprocMetastoreFederationGrpcTransport +from .grpc_asyncio import DataprocMetastoreFederationGrpcAsyncIOTransport + +# Compile a registry of transports. +_transport_registry = ( + OrderedDict() +) # type: Dict[str, Type[DataprocMetastoreFederationTransport]] +_transport_registry["grpc"] = DataprocMetastoreFederationGrpcTransport +_transport_registry["grpc_asyncio"] = DataprocMetastoreFederationGrpcAsyncIOTransport + +__all__ = ( + "DataprocMetastoreFederationTransport", + "DataprocMetastoreFederationGrpcTransport", + "DataprocMetastoreFederationGrpcAsyncIOTransport", +) diff --git a/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/base.py b/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/base.py new file mode 100644 index 0000000..6159cac --- /dev/null +++ b/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/base.py @@ -0,0 +1,222 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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 abc +from typing import Awaitable, Callable, Dict, Optional, Sequence, Union + +import google.api_core +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1, operations_v1 +from google.api_core import retry as retries +import google.auth # type: ignore +from google.auth import credentials as ga_credentials # type: ignore +from google.longrunning import operations_pb2 # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.cloud.metastore_v1 import gapic_version as package_version +from google.cloud.metastore_v1.types import metastore_federation + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) + + +class DataprocMetastoreFederationTransport(abc.ABC): + """Abstract transport class for DataprocMetastoreFederation.""" + + AUTH_SCOPES = ("https://www.googleapis.com/auth/cloud-platform",) + + DEFAULT_HOST: str = "metastore.googleapis.com" + + def __init__( + self, + *, + host: str = DEFAULT_HOST, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + **kwargs, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A list of scopes. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + """ + + scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} + + # Save the scopes. + self._scopes = scopes + + # If no credentials are provided, then determine the appropriate + # defaults. + if credentials and credentials_file: + raise core_exceptions.DuplicateCredentialArgs( + "'credentials_file' and 'credentials' are mutually exclusive" + ) + + if credentials_file is not None: + credentials, _ = google.auth.load_credentials_from_file( + credentials_file, **scopes_kwargs, quota_project_id=quota_project_id + ) + elif credentials is None: + credentials, _ = google.auth.default( + **scopes_kwargs, quota_project_id=quota_project_id + ) + # Don't apply audience if the credentials file passed from user. + if hasattr(credentials, "with_gdch_audience"): + credentials = credentials.with_gdch_audience( + api_audience if api_audience else host + ) + + # If the credentials are service account credentials, then always try to use self signed JWT. + if ( + always_use_jwt_access + and isinstance(credentials, service_account.Credentials) + and hasattr(service_account.Credentials, "with_always_use_jwt_access") + ): + credentials = credentials.with_always_use_jwt_access(True) + + # Save the credentials. + self._credentials = credentials + + # Save the hostname. Default to port 443 (HTTPS) if none is specified. + if ":" not in host: + host += ":443" + self._host = host + + def _prep_wrapped_messages(self, client_info): + # Precompute the wrapped methods. + self._wrapped_methods = { + self.list_federations: gapic_v1.method.wrap_method( + self.list_federations, + default_timeout=None, + client_info=client_info, + ), + self.get_federation: gapic_v1.method.wrap_method( + self.get_federation, + default_timeout=None, + client_info=client_info, + ), + self.create_federation: gapic_v1.method.wrap_method( + self.create_federation, + default_timeout=None, + client_info=client_info, + ), + self.update_federation: gapic_v1.method.wrap_method( + self.update_federation, + default_timeout=None, + client_info=client_info, + ), + self.delete_federation: gapic_v1.method.wrap_method( + self.delete_federation, + default_timeout=None, + client_info=client_info, + ), + } + + def close(self): + """Closes resources associated with the transport. + + .. warning:: + Only call this method if the transport is NOT shared + with other clients - this may cause errors in other clients! + """ + raise NotImplementedError() + + @property + def operations_client(self): + """Return the client designed to process long-running operations.""" + raise NotImplementedError() + + @property + def list_federations( + self, + ) -> Callable[ + [metastore_federation.ListFederationsRequest], + Union[ + metastore_federation.ListFederationsResponse, + Awaitable[metastore_federation.ListFederationsResponse], + ], + ]: + raise NotImplementedError() + + @property + def get_federation( + self, + ) -> Callable[ + [metastore_federation.GetFederationRequest], + Union[ + metastore_federation.Federation, Awaitable[metastore_federation.Federation] + ], + ]: + raise NotImplementedError() + + @property + def create_federation( + self, + ) -> Callable[ + [metastore_federation.CreateFederationRequest], + Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], + ]: + raise NotImplementedError() + + @property + def update_federation( + self, + ) -> Callable[ + [metastore_federation.UpdateFederationRequest], + Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], + ]: + raise NotImplementedError() + + @property + def delete_federation( + self, + ) -> Callable[ + [metastore_federation.DeleteFederationRequest], + Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], + ]: + raise NotImplementedError() + + @property + def kind(self) -> str: + raise NotImplementedError() + + +__all__ = ("DataprocMetastoreFederationTransport",) diff --git a/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/grpc.py b/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/grpc.py new file mode 100644 index 0000000..64359c9 --- /dev/null +++ b/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/grpc.py @@ -0,0 +1,411 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from typing import Callable, Dict, Optional, Sequence, Tuple, Union +import warnings + +from google.api_core import gapic_v1, grpc_helpers, operations_v1 +import google.auth # type: ignore +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.longrunning import operations_pb2 # type: ignore +import grpc # type: ignore + +from google.cloud.metastore_v1.types import metastore_federation + +from .base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport + + +class DataprocMetastoreFederationGrpcTransport(DataprocMetastoreFederationTransport): + """gRPC backend transport for DataprocMetastoreFederation. + + Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + + _stubs: Dict[str, Callable] + + def __init__( + self, + *, + host: str = "metastore.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: Optional[grpc.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + channel (Optional[grpc.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or application default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for the grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure a mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + self._grpc_channel = None + self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} + self._operations_client: Optional[operations_v1.OperationsClient] = None + + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + + if channel: + # Ignore credentials if a channel was passed. + credentials = False + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + self._ssl_channel_credentials = None + + else: + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials + + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + if not self._grpc_channel: + self._grpc_channel = type(self).create_channel( + self._host, + # use the credentials which are saved + credentials=self._credentials, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, + scopes=self._scopes, + ssl_credentials=self._ssl_channel_credentials, + quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) + + @classmethod + def create_channel( + cls, + host: str = "metastore.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs, + ) -> grpc.Channel: + """Create and return a gRPC channel object. + Args: + host (Optional[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + grpc.Channel: A gRPC channel object. + + Raises: + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + + return grpc_helpers.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + quota_project_id=quota_project_id, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, + **kwargs, + ) + + @property + def grpc_channel(self) -> grpc.Channel: + """Return the channel designed to connect to this service.""" + return self._grpc_channel + + @property + def operations_client(self) -> operations_v1.OperationsClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Quick check: Only create a new client if we do not already have one. + if self._operations_client is None: + self._operations_client = operations_v1.OperationsClient(self.grpc_channel) + + # Return the client from cache. + return self._operations_client + + @property + def list_federations( + self, + ) -> Callable[ + [metastore_federation.ListFederationsRequest], + metastore_federation.ListFederationsResponse, + ]: + r"""Return a callable for the list federations method over gRPC. + + Lists federations in a project and location. + + Returns: + Callable[[~.ListFederationsRequest], + ~.ListFederationsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_federations" not in self._stubs: + self._stubs["list_federations"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1.DataprocMetastoreFederation/ListFederations", + request_serializer=metastore_federation.ListFederationsRequest.serialize, + response_deserializer=metastore_federation.ListFederationsResponse.deserialize, + ) + return self._stubs["list_federations"] + + @property + def get_federation( + self, + ) -> Callable[ + [metastore_federation.GetFederationRequest], metastore_federation.Federation + ]: + r"""Return a callable for the get federation method over gRPC. + + Gets the details of a single federation. + + Returns: + Callable[[~.GetFederationRequest], + ~.Federation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_federation" not in self._stubs: + self._stubs["get_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1.DataprocMetastoreFederation/GetFederation", + request_serializer=metastore_federation.GetFederationRequest.serialize, + response_deserializer=metastore_federation.Federation.deserialize, + ) + return self._stubs["get_federation"] + + @property + def create_federation( + self, + ) -> Callable[ + [metastore_federation.CreateFederationRequest], operations_pb2.Operation + ]: + r"""Return a callable for the create federation method over gRPC. + + Creates a metastore federation in a project and + location. + + Returns: + Callable[[~.CreateFederationRequest], + ~.Operation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "create_federation" not in self._stubs: + self._stubs["create_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1.DataprocMetastoreFederation/CreateFederation", + request_serializer=metastore_federation.CreateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["create_federation"] + + @property + def update_federation( + self, + ) -> Callable[ + [metastore_federation.UpdateFederationRequest], operations_pb2.Operation + ]: + r"""Return a callable for the update federation method over gRPC. + + Updates the fields of a federation. + + Returns: + Callable[[~.UpdateFederationRequest], + ~.Operation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "update_federation" not in self._stubs: + self._stubs["update_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1.DataprocMetastoreFederation/UpdateFederation", + request_serializer=metastore_federation.UpdateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["update_federation"] + + @property + def delete_federation( + self, + ) -> Callable[ + [metastore_federation.DeleteFederationRequest], operations_pb2.Operation + ]: + r"""Return a callable for the delete federation method over gRPC. + + Deletes a single federation. + + Returns: + Callable[[~.DeleteFederationRequest], + ~.Operation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "delete_federation" not in self._stubs: + self._stubs["delete_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1.DataprocMetastoreFederation/DeleteFederation", + request_serializer=metastore_federation.DeleteFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["delete_federation"] + + def close(self): + self.grpc_channel.close() + + @property + def kind(self) -> str: + return "grpc" + + +__all__ = ("DataprocMetastoreFederationGrpcTransport",) diff --git a/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/grpc_asyncio.py b/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/grpc_asyncio.py new file mode 100644 index 0000000..fe638da --- /dev/null +++ b/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/grpc_asyncio.py @@ -0,0 +1,418 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union +import warnings + +from google.api_core import gapic_v1, grpc_helpers_async, operations_v1 +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.longrunning import operations_pb2 # type: ignore +import grpc # type: ignore +from grpc.experimental import aio # type: ignore + +from google.cloud.metastore_v1.types import metastore_federation + +from .base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport +from .grpc import DataprocMetastoreFederationGrpcTransport + + +class DataprocMetastoreFederationGrpcAsyncIOTransport( + DataprocMetastoreFederationTransport +): + """gRPC AsyncIO backend transport for DataprocMetastoreFederation. + + Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + + _grpc_channel: aio.Channel + _stubs: Dict[str, Callable] = {} + + @classmethod + def create_channel( + cls, + host: str = "metastore.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs, + ) -> aio.Channel: + """Create and return a gRPC AsyncIO channel object. + Args: + host (Optional[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + aio.Channel: A gRPC AsyncIO channel object. + """ + + return grpc_helpers_async.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + quota_project_id=quota_project_id, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, + **kwargs, + ) + + def __init__( + self, + *, + host: str = "metastore.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: Optional[aio.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + channel (Optional[aio.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or application default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for the grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure a mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + + Raises: + google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + creation failed for any reason. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + self._grpc_channel = None + self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} + self._operations_client: Optional[operations_v1.OperationsAsyncClient] = None + + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + + if channel: + # Ignore credentials if a channel was passed. + credentials = False + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + self._ssl_channel_credentials = None + else: + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials + + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + if not self._grpc_channel: + self._grpc_channel = type(self).create_channel( + self._host, + # use the credentials which are saved + credentials=self._credentials, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, + scopes=self._scopes, + ssl_credentials=self._ssl_channel_credentials, + quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) + + @property + def grpc_channel(self) -> aio.Channel: + """Create the channel designed to connect to this service. + + This property caches on the instance; repeated calls return + the same channel. + """ + # Return the channel from cache. + return self._grpc_channel + + @property + def operations_client(self) -> operations_v1.OperationsAsyncClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Quick check: Only create a new client if we do not already have one. + if self._operations_client is None: + self._operations_client = operations_v1.OperationsAsyncClient( + self.grpc_channel + ) + + # Return the client from cache. + return self._operations_client + + @property + def list_federations( + self, + ) -> Callable[ + [metastore_federation.ListFederationsRequest], + Awaitable[metastore_federation.ListFederationsResponse], + ]: + r"""Return a callable for the list federations method over gRPC. + + Lists federations in a project and location. + + Returns: + Callable[[~.ListFederationsRequest], + Awaitable[~.ListFederationsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_federations" not in self._stubs: + self._stubs["list_federations"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1.DataprocMetastoreFederation/ListFederations", + request_serializer=metastore_federation.ListFederationsRequest.serialize, + response_deserializer=metastore_federation.ListFederationsResponse.deserialize, + ) + return self._stubs["list_federations"] + + @property + def get_federation( + self, + ) -> Callable[ + [metastore_federation.GetFederationRequest], + Awaitable[metastore_federation.Federation], + ]: + r"""Return a callable for the get federation method over gRPC. + + Gets the details of a single federation. + + Returns: + Callable[[~.GetFederationRequest], + Awaitable[~.Federation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_federation" not in self._stubs: + self._stubs["get_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1.DataprocMetastoreFederation/GetFederation", + request_serializer=metastore_federation.GetFederationRequest.serialize, + response_deserializer=metastore_federation.Federation.deserialize, + ) + return self._stubs["get_federation"] + + @property + def create_federation( + self, + ) -> Callable[ + [metastore_federation.CreateFederationRequest], + Awaitable[operations_pb2.Operation], + ]: + r"""Return a callable for the create federation method over gRPC. + + Creates a metastore federation in a project and + location. + + Returns: + Callable[[~.CreateFederationRequest], + Awaitable[~.Operation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "create_federation" not in self._stubs: + self._stubs["create_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1.DataprocMetastoreFederation/CreateFederation", + request_serializer=metastore_federation.CreateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["create_federation"] + + @property + def update_federation( + self, + ) -> Callable[ + [metastore_federation.UpdateFederationRequest], + Awaitable[operations_pb2.Operation], + ]: + r"""Return a callable for the update federation method over gRPC. + + Updates the fields of a federation. + + Returns: + Callable[[~.UpdateFederationRequest], + Awaitable[~.Operation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "update_federation" not in self._stubs: + self._stubs["update_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1.DataprocMetastoreFederation/UpdateFederation", + request_serializer=metastore_federation.UpdateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["update_federation"] + + @property + def delete_federation( + self, + ) -> Callable[ + [metastore_federation.DeleteFederationRequest], + Awaitable[operations_pb2.Operation], + ]: + r"""Return a callable for the delete federation method over gRPC. + + Deletes a single federation. + + Returns: + Callable[[~.DeleteFederationRequest], + Awaitable[~.Operation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "delete_federation" not in self._stubs: + self._stubs["delete_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1.DataprocMetastoreFederation/DeleteFederation", + request_serializer=metastore_federation.DeleteFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["delete_federation"] + + def close(self): + return self.grpc_channel.close() + + +__all__ = ("DataprocMetastoreFederationGrpcAsyncIOTransport",) diff --git a/google/cloud/metastore_v1/types/__init__.py b/google/cloud/metastore_v1/types/__init__.py index 3fdebc0..528f1b7 100644 --- a/google/cloud/metastore_v1/types/__init__.py +++ b/google/cloud/metastore_v1/types/__init__.py @@ -21,6 +21,7 @@ DatabaseDumpSpec, DeleteBackupRequest, DeleteServiceRequest, + EncryptionConfig, ExportMetadataRequest, GetBackupRequest, GetMetadataImportRequest, @@ -38,14 +39,26 @@ MetadataExport, MetadataImport, MetadataManagementActivity, + NetworkConfig, OperationMetadata, Restore, RestoreServiceRequest, Secret, Service, + TelemetryConfig, UpdateMetadataImportRequest, UpdateServiceRequest, ) +from .metastore_federation import ( + BackendMetastore, + CreateFederationRequest, + DeleteFederationRequest, + Federation, + GetFederationRequest, + ListFederationsRequest, + ListFederationsResponse, + UpdateFederationRequest, +) __all__ = ( "Backup", @@ -55,6 +68,7 @@ "DatabaseDumpSpec", "DeleteBackupRequest", "DeleteServiceRequest", + "EncryptionConfig", "ExportMetadataRequest", "GetBackupRequest", "GetMetadataImportRequest", @@ -72,11 +86,21 @@ "MetadataExport", "MetadataImport", "MetadataManagementActivity", + "NetworkConfig", "OperationMetadata", "Restore", "RestoreServiceRequest", "Secret", "Service", + "TelemetryConfig", "UpdateMetadataImportRequest", "UpdateServiceRequest", + "BackendMetastore", + "CreateFederationRequest", + "DeleteFederationRequest", + "Federation", + "GetFederationRequest", + "ListFederationsRequest", + "ListFederationsResponse", + "UpdateFederationRequest", ) diff --git a/google/cloud/metastore_v1/types/metastore.py b/google/cloud/metastore_v1/types/metastore.py index c0948f3..239057e 100644 --- a/google/cloud/metastore_v1/types/metastore.py +++ b/google/cloud/metastore_v1/types/metastore.py @@ -13,6 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from typing import MutableMapping, MutableSequence + from google.protobuf import field_mask_pb2 # type: ignore from google.protobuf import timestamp_pb2 # type: ignore from google.protobuf import wrappers_pb2 # type: ignore @@ -27,6 +29,9 @@ "HiveMetastoreConfig", "KerberosConfig", "Secret", + "EncryptionConfig", + "NetworkConfig", + "TelemetryConfig", "MetadataManagementActivity", "MetadataImport", "MetadataExport", @@ -71,7 +76,7 @@ class Service(proto.Message): This field is a member of `oneof`_ ``metastore_config``. name (str): Immutable. The relative resource name of the metastore - service, of the form: + service, in the following format: ``projects/{project_number}/locations/{location_id}/services/{service_id}``. create_time (google.protobuf.timestamp_pb2.Timestamp): @@ -80,7 +85,7 @@ class Service(proto.Message): update_time (google.protobuf.timestamp_pb2.Timestamp): Output only. The time when the metastore service was last updated. - labels (Mapping[str, str]): + labels (MutableMapping[str, str]): User-defined labels for the metastore service. network (str): @@ -112,7 +117,9 @@ class Service(proto.Message): The one hour maintenance window of the metastore service. This specifies when the service can be restarted for maintenance - purposes in UTC time. + purposes in UTC time. Maintenance window is not + needed for services with the SPANNER database + type. uid (str): Output only. The globally unique resource identifier of the metastore service. @@ -122,6 +129,20 @@ class Service(proto.Message): release_channel (google.cloud.metastore_v1.types.Service.ReleaseChannel): Immutable. The release channel of the service. If unspecified, defaults to ``STABLE``. + encryption_config (google.cloud.metastore_v1.types.EncryptionConfig): + Immutable. Information used to configure the + Dataproc Metastore service to encrypt customer + data at rest. Cannot be updated. + network_config (google.cloud.metastore_v1.types.NetworkConfig): + The configuration specifying the network + settings for the Dataproc Metastore service. + database_type (google.cloud.metastore_v1.types.Service.DatabaseType): + Immutable. The database type that the + Metastore service stores its data. + telemetry_config (google.cloud.metastore_v1.types.TelemetryConfig): + The configuration specifying telemetry settings for the + Dataproc Metastore service. If unspecified defaults to + ``JSON``. """ class State(proto.Enum): @@ -151,80 +172,106 @@ class ReleaseChannel(proto.Enum): CANARY = 1 STABLE = 2 - hive_metastore_config = proto.Field( + class DatabaseType(proto.Enum): + r"""The backend database type for the metastore service.""" + DATABASE_TYPE_UNSPECIFIED = 0 + MYSQL = 1 + SPANNER = 2 + + hive_metastore_config: "HiveMetastoreConfig" = proto.Field( proto.MESSAGE, number=5, oneof="metastore_config", message="HiveMetastoreConfig", ) - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - update_time = proto.Field( + update_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=3, message=timestamp_pb2.Timestamp, ) - labels = proto.MapField( + labels: MutableMapping[str, str] = proto.MapField( proto.STRING, proto.STRING, number=4, ) - network = proto.Field( + network: str = proto.Field( proto.STRING, number=7, ) - endpoint_uri = proto.Field( + endpoint_uri: str = proto.Field( proto.STRING, number=8, ) - port = proto.Field( + port: int = proto.Field( proto.INT32, number=9, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=10, enum=State, ) - state_message = proto.Field( + state_message: str = proto.Field( proto.STRING, number=11, ) - artifact_gcs_uri = proto.Field( + artifact_gcs_uri: str = proto.Field( proto.STRING, number=12, ) - tier = proto.Field( + tier: Tier = proto.Field( proto.ENUM, number=13, enum=Tier, ) - maintenance_window = proto.Field( + maintenance_window: "MaintenanceWindow" = proto.Field( proto.MESSAGE, number=15, message="MaintenanceWindow", ) - uid = proto.Field( + uid: str = proto.Field( proto.STRING, number=16, ) - metadata_management_activity = proto.Field( + metadata_management_activity: "MetadataManagementActivity" = proto.Field( proto.MESSAGE, number=17, message="MetadataManagementActivity", ) - release_channel = proto.Field( + release_channel: ReleaseChannel = proto.Field( proto.ENUM, number=19, enum=ReleaseChannel, ) + encryption_config: "EncryptionConfig" = proto.Field( + proto.MESSAGE, + number=20, + message="EncryptionConfig", + ) + network_config: "NetworkConfig" = proto.Field( + proto.MESSAGE, + number=21, + message="NetworkConfig", + ) + database_type: DatabaseType = proto.Field( + proto.ENUM, + number=22, + enum=DatabaseType, + ) + telemetry_config: "TelemetryConfig" = proto.Field( + proto.MESSAGE, + number=23, + message="TelemetryConfig", + ) class MaintenanceWindow(proto.Message): @@ -239,12 +286,12 @@ class MaintenanceWindow(proto.Message): The day of week, when the window starts. """ - hour_of_day = proto.Field( + hour_of_day: wrappers_pb2.Int32Value = proto.Field( proto.MESSAGE, number=1, message=wrappers_pb2.Int32Value, ) - day_of_week = proto.Field( + day_of_week: dayofweek_pb2.DayOfWeek = proto.Field( proto.ENUM, number=2, enum=dayofweek_pb2.DayOfWeek, @@ -258,11 +305,13 @@ class HiveMetastoreConfig(proto.Message): Attributes: version (str): Immutable. The Hive metastore schema version. - config_overrides (Mapping[str, str]): + config_overrides (MutableMapping[str, str]): A mapping of Hive metastore configuration key-value pairs to apply to the Hive metastore (configured in ``hive-site.xml``). The mappings override system defaults - (some keys cannot be overridden). + (some keys cannot be overridden). These overrides are also + applied to auxiliary versions and can be further customized + in the auxiliary version's ``AuxiliaryVersionConfig``. kerberos_config (google.cloud.metastore_v1.types.KerberosConfig): Information used to configure the Hive metastore service as a service principal in a Kerberos realm. To disable @@ -272,16 +321,16 @@ class HiveMetastoreConfig(proto.Message): the request's ``service``. """ - version = proto.Field( + version: str = proto.Field( proto.STRING, number=1, ) - config_overrides = proto.MapField( + config_overrides: MutableMapping[str, str] = proto.MapField( proto.STRING, proto.STRING, number=2, ) - kerberos_config = proto.Field( + kerberos_config: "KerberosConfig" = proto.Field( proto.MESSAGE, number=3, message="KerberosConfig", @@ -307,16 +356,16 @@ class KerberosConfig(proto.Message): does not need to be named krb5.conf explicitly. """ - keytab = proto.Field( + keytab: "Secret" = proto.Field( proto.MESSAGE, number=1, message="Secret", ) - principal = proto.Field( + principal: str = proto.Field( proto.STRING, number=2, ) - krb5_config_gcs_uri = proto.Field( + krb5_config_gcs_uri: str = proto.Field( proto.STRING, number=3, ) @@ -337,31 +386,122 @@ class Secret(proto.Message): This field is a member of `oneof`_ ``value``. """ - cloud_secret = proto.Field( + cloud_secret: str = proto.Field( proto.STRING, number=2, oneof="value", ) +class EncryptionConfig(proto.Message): + r"""Encryption settings for the service. + + Attributes: + kms_key (str): + The fully qualified customer provided Cloud KMS key name to + use for customer data encryption, in the following form: + + ``projects/{project_number}/locations/{location_id}/keyRings/{key_ring_id}/cryptoKeys/{crypto_key_id}``. + """ + + kms_key: str = proto.Field( + proto.STRING, + number=1, + ) + + +class NetworkConfig(proto.Message): + r"""Network configuration for the Dataproc Metastore service. + + Attributes: + consumers (MutableSequence[google.cloud.metastore_v1.types.NetworkConfig.Consumer]): + Immutable. The consumer-side network + configuration for the Dataproc Metastore + instance. + """ + + class Consumer(proto.Message): + r"""Contains information of the customer's network + configurations. + + + .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields + + Attributes: + subnetwork (str): + Immutable. The subnetwork of the customer project from which + an IP address is reserved and used as the Dataproc Metastore + service's endpoint. It is accessible to hosts in the subnet + and to all hosts in a subnet in the same region and same + network. There must be at least one IP address available in + the subnet's primary range. The subnet is specified in the + following form: + + ``projects/{project_number}/regions/{region_id}/subnetworks/{subnetwork_id}`` + + This field is a member of `oneof`_ ``vpc_resource``. + endpoint_uri (str): + Output only. The URI of the endpoint used to + access the metastore service. + """ + + subnetwork: str = proto.Field( + proto.STRING, + number=1, + oneof="vpc_resource", + ) + endpoint_uri: str = proto.Field( + proto.STRING, + number=3, + ) + + consumers: MutableSequence[Consumer] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=Consumer, + ) + + +class TelemetryConfig(proto.Message): + r"""Telemetry Configuration for the Dataproc Metastore service. + + Attributes: + log_format (google.cloud.metastore_v1.types.TelemetryConfig.LogFormat): + The output format of the Dataproc Metastore + service's logs. + """ + + class LogFormat(proto.Enum): + r"""""" + LOG_FORMAT_UNSPECIFIED = 0 + LEGACY = 1 + JSON = 2 + + log_format: LogFormat = proto.Field( + proto.ENUM, + number=1, + enum=LogFormat, + ) + + class MetadataManagementActivity(proto.Message): r"""The metadata management activities of the metastore service. Attributes: - metadata_exports (Sequence[google.cloud.metastore_v1.types.MetadataExport]): + metadata_exports (MutableSequence[google.cloud.metastore_v1.types.MetadataExport]): Output only. The latest metadata exports of the metastore service. - restores (Sequence[google.cloud.metastore_v1.types.Restore]): + restores (MutableSequence[google.cloud.metastore_v1.types.Restore]): Output only. The latest restores of the metastore service. """ - metadata_exports = proto.RepeatedField( + metadata_exports: MutableSequence["MetadataExport"] = proto.RepeatedField( proto.MESSAGE, number=1, message="MetadataExport", ) - restores = proto.RepeatedField( + restores: MutableSequence["Restore"] = proto.RepeatedField( proto.MESSAGE, number=2, message="Restore", @@ -429,51 +569,51 @@ class DatabaseType(proto.Enum): DATABASE_TYPE_UNSPECIFIED = 0 MYSQL = 1 - database_type = proto.Field( + database_type: "MetadataImport.DatabaseDump.DatabaseType" = proto.Field( proto.ENUM, number=1, enum="MetadataImport.DatabaseDump.DatabaseType", ) - gcs_uri = proto.Field( + gcs_uri: str = proto.Field( proto.STRING, number=2, ) - type_ = proto.Field( + type_: "DatabaseDumpSpec.Type" = proto.Field( proto.ENUM, number=4, enum="DatabaseDumpSpec.Type", ) - database_dump = proto.Field( + database_dump: DatabaseDump = proto.Field( proto.MESSAGE, number=6, oneof="metadata", message=DatabaseDump, ) - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - description = proto.Field( + description: str = proto.Field( proto.STRING, number=2, ) - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=3, message=timestamp_pb2.Timestamp, ) - update_time = proto.Field( + update_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=4, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=7, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=5, enum=State, @@ -512,27 +652,27 @@ class State(proto.Enum): FAILED = 3 CANCELLED = 4 - destination_gcs_uri = proto.Field( + destination_gcs_uri: str = proto.Field( proto.STRING, number=4, oneof="destination", ) - start_time = proto.Field( + start_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=3, enum=State, ) - database_dump_type = proto.Field( + database_dump_type: "DatabaseDumpSpec.Type" = proto.Field( proto.ENUM, number=5, enum="DatabaseDumpSpec.Type", @@ -561,7 +701,7 @@ class Backup(proto.Message): the time of backup. description (str): The description of the backup. - restoring_services (Sequence[str]): + restoring_services (MutableSequence[str]): Output only. Services that are restoring from the backup. """ @@ -575,35 +715,35 @@ class State(proto.Enum): FAILED = 4 RESTORING = 5 - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=3, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=4, enum=State, ) - service_revision = proto.Field( + service_revision: "Service" = proto.Field( proto.MESSAGE, number=5, message="Service", ) - description = proto.Field( + description: str = proto.Field( proto.STRING, number=6, ) - restoring_services = proto.RepeatedField( + restoring_services: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=7, ) @@ -648,31 +788,31 @@ class RestoreType(proto.Enum): FULL = 1 METADATA_ONLY = 2 - start_time = proto.Field( + start_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=3, enum=State, ) - backup = proto.Field( + backup: str = proto.Field( proto.STRING, number=4, ) - type_ = proto.Field( + type_: RestoreType = proto.Field( proto.ENUM, number=5, enum=RestoreType, ) - details = proto.Field( + details: str = proto.Field( proto.STRING, number=6, ) @@ -715,23 +855,23 @@ class ListServicesRequest(proto.Message): order. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - page_size = proto.Field( + page_size: int = proto.Field( proto.INT32, number=2, ) - page_token = proto.Field( + page_token: str = proto.Field( proto.STRING, number=3, ) - filter = proto.Field( + filter: str = proto.Field( proto.STRING, number=4, ) - order_by = proto.Field( + order_by: str = proto.Field( proto.STRING, number=5, ) @@ -742,13 +882,13 @@ class ListServicesResponse(proto.Message): [DataprocMetastore.ListServices][google.cloud.metastore.v1.DataprocMetastore.ListServices]. Attributes: - services (Sequence[google.cloud.metastore_v1.types.Service]): + services (MutableSequence[google.cloud.metastore_v1.types.Service]): The services in the specified location. next_page_token (str): A token that can be sent as ``page_token`` to retrieve the next page. If this field is omitted, there are no subsequent pages. - unreachable (Sequence[str]): + unreachable (MutableSequence[str]): Locations that could not be reached. """ @@ -756,16 +896,16 @@ class ListServicesResponse(proto.Message): def raw_page(self): return self - services = proto.RepeatedField( + services: MutableSequence["Service"] = proto.RepeatedField( proto.MESSAGE, number=1, message="Service", ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - unreachable = proto.RepeatedField( + unreachable: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=3, ) @@ -783,7 +923,7 @@ class GetServiceRequest(proto.Message): ``projects/{project_number}/locations/{location_id}/services/{service_id}``. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -829,20 +969,20 @@ class CreateServiceRequest(proto.Message): supported. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - service_id = proto.Field( + service_id: str = proto.Field( proto.STRING, number=2, ) - service = proto.Field( + service: "Service" = proto.Field( proto.MESSAGE, number=3, message="Service", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -884,17 +1024,17 @@ class UpdateServiceRequest(proto.Message): supported. """ - update_mask = proto.Field( + update_mask: field_mask_pb2.FieldMask = proto.Field( proto.MESSAGE, number=1, message=field_mask_pb2.FieldMask, ) - service = proto.Field( + service: "Service" = proto.Field( proto.MESSAGE, number=2, message="Service", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=3, ) @@ -928,11 +1068,11 @@ class DeleteServiceRequest(proto.Message): supported. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=2, ) @@ -975,23 +1115,23 @@ class ListMetadataImportsRequest(proto.Message): order. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - page_size = proto.Field( + page_size: int = proto.Field( proto.INT32, number=2, ) - page_token = proto.Field( + page_token: str = proto.Field( proto.STRING, number=3, ) - filter = proto.Field( + filter: str = proto.Field( proto.STRING, number=4, ) - order_by = proto.Field( + order_by: str = proto.Field( proto.STRING, number=5, ) @@ -1002,13 +1142,13 @@ class ListMetadataImportsResponse(proto.Message): [DataprocMetastore.ListMetadataImports][google.cloud.metastore.v1.DataprocMetastore.ListMetadataImports]. Attributes: - metadata_imports (Sequence[google.cloud.metastore_v1.types.MetadataImport]): + metadata_imports (MutableSequence[google.cloud.metastore_v1.types.MetadataImport]): The imports in the specified service. next_page_token (str): A token that can be sent as ``page_token`` to retrieve the next page. If this field is omitted, there are no subsequent pages. - unreachable (Sequence[str]): + unreachable (MutableSequence[str]): Locations that could not be reached. """ @@ -1016,16 +1156,16 @@ class ListMetadataImportsResponse(proto.Message): def raw_page(self): return self - metadata_imports = proto.RepeatedField( + metadata_imports: MutableSequence["MetadataImport"] = proto.RepeatedField( proto.MESSAGE, number=1, message="MetadataImport", ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - unreachable = proto.RepeatedField( + unreachable: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=3, ) @@ -1043,7 +1183,7 @@ class GetMetadataImportRequest(proto.Message): ``projects/{project_number}/locations/{location_id}/services/{service_id}/metadataImports/{import_id}``. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -1089,20 +1229,20 @@ class CreateMetadataImportRequest(proto.Message): supported. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - metadata_import_id = proto.Field( + metadata_import_id: str = proto.Field( proto.STRING, number=2, ) - metadata_import = proto.Field( + metadata_import: "MetadataImport" = proto.Field( proto.MESSAGE, number=3, message="MetadataImport", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -1144,17 +1284,17 @@ class UpdateMetadataImportRequest(proto.Message): supported. """ - update_mask = proto.Field( + update_mask: field_mask_pb2.FieldMask = proto.Field( proto.MESSAGE, number=1, message=field_mask_pb2.FieldMask, ) - metadata_import = proto.Field( + metadata_import: "MetadataImport" = proto.Field( proto.MESSAGE, number=2, message="MetadataImport", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=3, ) @@ -1197,23 +1337,23 @@ class ListBackupsRequest(proto.Message): order. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - page_size = proto.Field( + page_size: int = proto.Field( proto.INT32, number=2, ) - page_token = proto.Field( + page_token: str = proto.Field( proto.STRING, number=3, ) - filter = proto.Field( + filter: str = proto.Field( proto.STRING, number=4, ) - order_by = proto.Field( + order_by: str = proto.Field( proto.STRING, number=5, ) @@ -1224,13 +1364,13 @@ class ListBackupsResponse(proto.Message): [DataprocMetastore.ListBackups][google.cloud.metastore.v1.DataprocMetastore.ListBackups]. Attributes: - backups (Sequence[google.cloud.metastore_v1.types.Backup]): + backups (MutableSequence[google.cloud.metastore_v1.types.Backup]): The backups of the specified service. next_page_token (str): A token that can be sent as ``page_token`` to retrieve the next page. If this field is omitted, there are no subsequent pages. - unreachable (Sequence[str]): + unreachable (MutableSequence[str]): Locations that could not be reached. """ @@ -1238,16 +1378,16 @@ class ListBackupsResponse(proto.Message): def raw_page(self): return self - backups = proto.RepeatedField( + backups: MutableSequence["Backup"] = proto.RepeatedField( proto.MESSAGE, number=1, message="Backup", ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - unreachable = proto.RepeatedField( + unreachable: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=3, ) @@ -1265,7 +1405,7 @@ class GetBackupRequest(proto.Message): ``projects/{project_number}/locations/{location_id}/services/{service_id}/backups/{backup_id}``. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -1311,20 +1451,20 @@ class CreateBackupRequest(proto.Message): supported. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - backup_id = proto.Field( + backup_id: str = proto.Field( proto.STRING, number=2, ) - backup = proto.Field( + backup: "Backup" = proto.Field( proto.MESSAGE, number=3, message="Backup", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -1358,11 +1498,11 @@ class DeleteBackupRequest(proto.Message): supported. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=2, ) @@ -1409,20 +1549,20 @@ class ExportMetadataRequest(proto.Message): defaults to ``MYSQL``. """ - destination_gcs_folder = proto.Field( + destination_gcs_folder: str = proto.Field( proto.STRING, number=2, oneof="destination", ) - service = proto.Field( + service: str = proto.Field( proto.STRING, number=1, ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=3, ) - database_dump_type = proto.Field( + database_dump_type: "DatabaseDumpSpec.Type" = proto.Field( proto.ENUM, number=4, enum="DatabaseDumpSpec.Type", @@ -1464,20 +1604,20 @@ class RestoreServiceRequest(proto.Message): supported. """ - service = proto.Field( + service: str = proto.Field( proto.STRING, number=1, ) - backup = proto.Field( + backup: str = proto.Field( proto.STRING, number=2, ) - restore_type = proto.Field( + restore_type: "Restore.RestoreType" = proto.Field( proto.ENUM, number=3, enum="Restore.RestoreType", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -1513,33 +1653,33 @@ class OperationMetadata(proto.Message): operation. """ - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - target = proto.Field( + target: str = proto.Field( proto.STRING, number=3, ) - verb = proto.Field( + verb: str = proto.Field( proto.STRING, number=4, ) - status_message = proto.Field( + status_message: str = proto.Field( proto.STRING, number=5, ) - requested_cancellation = proto.Field( + requested_cancellation: bool = proto.Field( proto.BOOL, number=6, ) - api_version = proto.Field( + api_version: str = proto.Field( proto.STRING, number=7, ) @@ -1549,7 +1689,7 @@ class LocationMetadata(proto.Message): r"""Metadata about the service in a location. Attributes: - supported_hive_metastore_versions (Sequence[google.cloud.metastore_v1.types.LocationMetadata.HiveMetastoreVersion]): + supported_hive_metastore_versions (MutableSequence[google.cloud.metastore_v1.types.LocationMetadata.HiveMetastoreVersion]): The versions of Hive Metastore that can be used when creating a new metastore service in this location. The server guarantees that exactly one ``HiveMetastoreVersion`` @@ -1570,16 +1710,18 @@ class HiveMetastoreVersion(proto.Message): that omits the ``version``. """ - version = proto.Field( + version: str = proto.Field( proto.STRING, number=1, ) - is_default = proto.Field( + is_default: bool = proto.Field( proto.BOOL, number=2, ) - supported_hive_metastore_versions = proto.RepeatedField( + supported_hive_metastore_versions: MutableSequence[ + HiveMetastoreVersion + ] = proto.RepeatedField( proto.MESSAGE, number=1, message=HiveMetastoreVersion, diff --git a/google/cloud/metastore_v1/types/metastore_federation.py b/google/cloud/metastore_v1/types/metastore_federation.py new file mode 100644 index 0000000..c890640 --- /dev/null +++ b/google/cloud/metastore_v1/types/metastore_federation.py @@ -0,0 +1,431 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from typing import MutableMapping, MutableSequence + +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore +import proto # type: ignore + +__protobuf__ = proto.module( + package="google.cloud.metastore.v1", + manifest={ + "Federation", + "BackendMetastore", + "ListFederationsRequest", + "ListFederationsResponse", + "GetFederationRequest", + "CreateFederationRequest", + "UpdateFederationRequest", + "DeleteFederationRequest", + }, +) + + +class Federation(proto.Message): + r"""Represents a federation of multiple backend metastores. + + Attributes: + name (str): + Immutable. The relative resource name of the federation, of + the form: + projects/{project_number}/locations/{location_id}/federations/{federation_id}`. + create_time (google.protobuf.timestamp_pb2.Timestamp): + Output only. The time when the metastore + federation was created. + update_time (google.protobuf.timestamp_pb2.Timestamp): + Output only. The time when the metastore + federation was last updated. + labels (MutableMapping[str, str]): + User-defined labels for the metastore + federation. + version (str): + Immutable. The Apache Hive metastore version + of the federation. All backend metastore + versions must be compatible with the federation + version. + backend_metastores (MutableMapping[int, google.cloud.metastore_v1.types.BackendMetastore]): + A map from ``BackendMetastore`` rank to + ``BackendMetastore``\ s from which the federation service + serves metadata at query time. The map key represents the + order in which ``BackendMetastore``\ s should be evaluated + to resolve database names at query time and should be + greater than or equal to zero. A ``BackendMetastore`` with a + lower number will be evaluated before a ``BackendMetastore`` + with a higher number. + endpoint_uri (str): + Output only. The federation endpoint. + state (google.cloud.metastore_v1.types.Federation.State): + Output only. The current state of the + federation. + state_message (str): + Output only. Additional information about the + current state of the metastore federation, if + available. + uid (str): + Output only. The globally unique resource + identifier of the metastore federation. + """ + + class State(proto.Enum): + r"""The current state of the federation.""" + STATE_UNSPECIFIED = 0 + CREATING = 1 + ACTIVE = 2 + UPDATING = 3 + DELETING = 4 + ERROR = 5 + + name: str = proto.Field( + proto.STRING, + number=1, + ) + create_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=2, + message=timestamp_pb2.Timestamp, + ) + update_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=3, + message=timestamp_pb2.Timestamp, + ) + labels: MutableMapping[str, str] = proto.MapField( + proto.STRING, + proto.STRING, + number=4, + ) + version: str = proto.Field( + proto.STRING, + number=5, + ) + backend_metastores: MutableMapping[int, "BackendMetastore"] = proto.MapField( + proto.INT32, + proto.MESSAGE, + number=6, + message="BackendMetastore", + ) + endpoint_uri: str = proto.Field( + proto.STRING, + number=7, + ) + state: State = proto.Field( + proto.ENUM, + number=8, + enum=State, + ) + state_message: str = proto.Field( + proto.STRING, + number=9, + ) + uid: str = proto.Field( + proto.STRING, + number=10, + ) + + +class BackendMetastore(proto.Message): + r"""Represents a backend metastore for the federation. + + Attributes: + name (str): + The relative resource name of the metastore that is being + federated. The formats of the relative resource names for + the currently supported metastores are listed below: + + - Dataplex + + - ``projects/{project_id}/locations/{location}/lakes/{lake_id}`` + + - BigQuery + + - ``projects/{project_id}`` + + - Dataproc Metastore + + - ``projects/{project_id}/locations/{location}/services/{service_id}`` + metastore_type (google.cloud.metastore_v1.types.BackendMetastore.MetastoreType): + The type of the backend metastore. + """ + + class MetastoreType(proto.Enum): + r"""The type of the backend metastore.""" + METASTORE_TYPE_UNSPECIFIED = 0 + DATAPROC_METASTORE = 3 + + name: str = proto.Field( + proto.STRING, + number=1, + ) + metastore_type: MetastoreType = proto.Field( + proto.ENUM, + number=2, + enum=MetastoreType, + ) + + +class ListFederationsRequest(proto.Message): + r"""Request message for ListFederations. + + Attributes: + parent (str): + Required. The relative resource name of the location of + metastore federations to list, in the following form: + ``projects/{project_number}/locations/{location_id}``. + page_size (int): + Optional. The maximum number of federations + to return. The response may contain less than + the maximum number. If unspecified, no more than + 500 services are returned. The maximum value is + 1000; values above 1000 are changed to 1000. + page_token (str): + Optional. A page token, received from a + previous ListFederationServices call. Provide + this token to retrieve the subsequent page. + To retrieve the first page, supply an empty page + token. + When paginating, other parameters provided to + ListFederationServices must match the call that + provided the page token. + filter (str): + Optional. The filter to apply to list + results. + order_by (str): + Optional. Specify the ordering of results as described in + `Sorting + Order `__. + If not specified, the results will be sorted in the default + order. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + page_size: int = proto.Field( + proto.INT32, + number=2, + ) + page_token: str = proto.Field( + proto.STRING, + number=3, + ) + filter: str = proto.Field( + proto.STRING, + number=4, + ) + order_by: str = proto.Field( + proto.STRING, + number=5, + ) + + +class ListFederationsResponse(proto.Message): + r"""Response message for ListFederations + + Attributes: + federations (MutableSequence[google.cloud.metastore_v1.types.Federation]): + The services in the specified location. + next_page_token (str): + A token that can be sent as ``page_token`` to retrieve the + next page. If this field is omitted, there are no subsequent + pages. + unreachable (MutableSequence[str]): + Locations that could not be reached. + """ + + @property + def raw_page(self): + return self + + federations: MutableSequence["Federation"] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message="Federation", + ) + next_page_token: str = proto.Field( + proto.STRING, + number=2, + ) + unreachable: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=3, + ) + + +class GetFederationRequest(proto.Message): + r"""Request message for GetFederation. + + Attributes: + name (str): + Required. The relative resource name of the metastore + federation to retrieve, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class CreateFederationRequest(proto.Message): + r"""Request message for CreateFederation. + + Attributes: + parent (str): + Required. The relative resource name of the location in + which to create a federation service, in the following form: + + ``projects/{project_number}/locations/{location_id}``. + federation_id (str): + Required. The ID of the metastore federation, + which is used as the final component of the + metastore federation's name. + This value must be between 2 and 63 characters + long inclusive, begin with a letter, end with a + letter or number, and consist of alpha-numeric + ASCII characters or hyphens. + federation (google.cloud.metastore_v1.types.Federation): + Required. The Metastore Federation to create. The ``name`` + field is ignored. The ID of the created metastore federation + must be provided in the request's ``federation_id`` field. + request_id (str): + Optional. A request ID. Specify a unique request ID to allow + the server to ignore the request if it has completed. The + server will ignore subsequent requests that provide a + duplicate request ID for at least 60 minutes after the first + request. + + For example, if an initial request times out, followed by + another request with the same request ID, the server ignores + the second request to prevent the creation of duplicate + commitments. + + The request ID must be a valid + `UUID `__ + A zero UUID (00000000-0000-0000-0000-000000000000) is not + supported. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + federation_id: str = proto.Field( + proto.STRING, + number=2, + ) + federation: "Federation" = proto.Field( + proto.MESSAGE, + number=3, + message="Federation", + ) + request_id: str = proto.Field( + proto.STRING, + number=4, + ) + + +class UpdateFederationRequest(proto.Message): + r"""Request message for UpdateFederation. + + Attributes: + update_mask (google.protobuf.field_mask_pb2.FieldMask): + Required. A field mask used to specify the fields to be + overwritten in the metastore federation resource by the + update. Fields specified in the ``update_mask`` are relative + to the resource (not to the full request). A field is + overwritten if it is in the mask. + federation (google.cloud.metastore_v1.types.Federation): + Required. The metastore federation to update. The server + only merges fields in the service if they are specified in + ``update_mask``. + + The metastore federation's ``name`` field is used to + identify the metastore service to be updated. + request_id (str): + Optional. A request ID. Specify a unique request ID to allow + the server to ignore the request if it has completed. The + server will ignore subsequent requests that provide a + duplicate request ID for at least 60 minutes after the first + request. + + For example, if an initial request times out, followed by + another request with the same request ID, the server ignores + the second request to prevent the creation of duplicate + commitments. + + The request ID must be a valid + `UUID `__ + A zero UUID (00000000-0000-0000-0000-000000000000) is not + supported. + """ + + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=1, + message=field_mask_pb2.FieldMask, + ) + federation: "Federation" = proto.Field( + proto.MESSAGE, + number=2, + message="Federation", + ) + request_id: str = proto.Field( + proto.STRING, + number=3, + ) + + +class DeleteFederationRequest(proto.Message): + r"""Request message for DeleteFederation. + + Attributes: + name (str): + Required. The relative resource name of the metastore + federation to delete, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + request_id (str): + Optional. A request ID. Specify a unique request ID to allow + the server to ignore the request if it has completed. The + server will ignore subsequent requests that provide a + duplicate request ID for at least 60 minutes after the first + request. + + For example, if an initial request times out, followed by + another request with the same request ID, the server ignores + the second request to prevent the creation of duplicate + commitments. + + The request ID must be a valid + `UUID `__ + A zero UUID (00000000-0000-0000-0000-000000000000) is not + supported. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + request_id: str = proto.Field( + proto.STRING, + number=2, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/google/cloud/metastore_v1alpha/__init__.py b/google/cloud/metastore_v1alpha/__init__.py index 7e0b75f..dd8a32d 100644 --- a/google/cloud/metastore_v1alpha/__init__.py +++ b/google/cloud/metastore_v1alpha/__init__.py @@ -13,11 +13,19 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from google.cloud.metastore import gapic_version as package_version + +__version__ = package_version.__version__ + from .services.dataproc_metastore import ( DataprocMetastoreAsyncClient, DataprocMetastoreClient, ) +from .services.dataproc_metastore_federation import ( + DataprocMetastoreFederationAsyncClient, + DataprocMetastoreFederationClient, +) from .types.metastore import ( AuxiliaryVersionConfig, Backup, @@ -55,26 +63,44 @@ RestoreServiceRequest, Secret, Service, + TelemetryConfig, UpdateMetadataImportRequest, UpdateServiceRequest, ) +from .types.metastore_federation import ( + BackendMetastore, + CreateFederationRequest, + DeleteFederationRequest, + Federation, + GetFederationRequest, + ListFederationsRequest, + ListFederationsResponse, + UpdateFederationRequest, +) __all__ = ( "DataprocMetastoreAsyncClient", + "DataprocMetastoreFederationAsyncClient", "AuxiliaryVersionConfig", + "BackendMetastore", "Backup", "CreateBackupRequest", + "CreateFederationRequest", "CreateMetadataImportRequest", "CreateServiceRequest", "DataCatalogConfig", "DatabaseDumpSpec", "DataplexConfig", "DataprocMetastoreClient", + "DataprocMetastoreFederationClient", "DeleteBackupRequest", + "DeleteFederationRequest", "DeleteServiceRequest", "EncryptionConfig", "ExportMetadataRequest", + "Federation", "GetBackupRequest", + "GetFederationRequest", "GetMetadataImportRequest", "GetServiceRequest", "HiveMetastoreConfig", @@ -82,6 +108,8 @@ "Lake", "ListBackupsRequest", "ListBackupsResponse", + "ListFederationsRequest", + "ListFederationsResponse", "ListMetadataImportsRequest", "ListMetadataImportsResponse", "ListServicesRequest", @@ -98,6 +126,8 @@ "RestoreServiceRequest", "Secret", "Service", + "TelemetryConfig", + "UpdateFederationRequest", "UpdateMetadataImportRequest", "UpdateServiceRequest", ) diff --git a/google/cloud/metastore_v1alpha/gapic_metadata.json b/google/cloud/metastore_v1alpha/gapic_metadata.json index 8aa71ab..4b27276 100644 --- a/google/cloud/metastore_v1alpha/gapic_metadata.json +++ b/google/cloud/metastore_v1alpha/gapic_metadata.json @@ -168,6 +168,70 @@ } } } + }, + "DataprocMetastoreFederation": { + "clients": { + "grpc": { + "libraryClient": "DataprocMetastoreFederationClient", + "rpcs": { + "CreateFederation": { + "methods": [ + "create_federation" + ] + }, + "DeleteFederation": { + "methods": [ + "delete_federation" + ] + }, + "GetFederation": { + "methods": [ + "get_federation" + ] + }, + "ListFederations": { + "methods": [ + "list_federations" + ] + }, + "UpdateFederation": { + "methods": [ + "update_federation" + ] + } + } + }, + "grpc-async": { + "libraryClient": "DataprocMetastoreFederationAsyncClient", + "rpcs": { + "CreateFederation": { + "methods": [ + "create_federation" + ] + }, + "DeleteFederation": { + "methods": [ + "delete_federation" + ] + }, + "GetFederation": { + "methods": [ + "get_federation" + ] + }, + "ListFederations": { + "methods": [ + "list_federations" + ] + }, + "UpdateFederation": { + "methods": [ + "update_federation" + ] + } + } + } + } } } } diff --git a/google/cloud/metastore_v1alpha/gapic_version.py b/google/cloud/metastore_v1alpha/gapic_version.py new file mode 100644 index 0000000..f033c61 --- /dev/null +++ b/google/cloud/metastore_v1alpha/gapic_version.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +__version__ = "1.7.0" # {x-release-please-version} diff --git a/google/cloud/metastore_v1alpha/py.typed b/google/cloud/metastore_v1alpha/py.typed index 72edca0..f949c43 100644 --- a/google/cloud/metastore_v1alpha/py.typed +++ b/google/cloud/metastore_v1alpha/py.typed @@ -1,2 +1,2 @@ # Marker file for PEP 561. -# The google-cloud-metastore package uses inline types. +# The google-cloud-dataproc-metastore package uses inline types. diff --git a/google/cloud/metastore_v1alpha/services/dataproc_metastore/async_client.py b/google/cloud/metastore_v1alpha/services/dataproc_metastore/async_client.py index 7138215..de33aef 100644 --- a/google/cloud/metastore_v1alpha/services/dataproc_metastore/async_client.py +++ b/google/cloud/metastore_v1alpha/services/dataproc_metastore/async_client.py @@ -16,7 +16,17 @@ from collections import OrderedDict import functools import re -from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, +) from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1 @@ -24,7 +34,8 @@ from google.api_core.client_options import ClientOptions from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore -import pkg_resources + +from google.cloud.metastore_v1alpha import gapic_version as package_version try: OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] @@ -199,9 +210,9 @@ def transport(self) -> DataprocMetastoreTransport: def __init__( self, *, - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, transport: Union[str, DataprocMetastoreTransport] = "grpc_asyncio", - client_options: ClientOptions = None, + client_options: Optional[ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiates the dataproc metastore client. @@ -245,11 +256,11 @@ def __init__( async def list_services( self, - request: Union[metastore.ListServicesRequest, dict] = None, + request: Optional[Union[metastore.ListServicesRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListServicesAsyncPager: r"""Lists services in a project and location. @@ -282,7 +293,7 @@ async def sample_list_services(): print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.ListServicesRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.ListServicesRequest, dict]]): The request object. Request message for [DataprocMetastore.ListServices][google.cloud.metastore.v1alpha.DataprocMetastore.ListServices]. parent (:class:`str`): @@ -303,7 +314,7 @@ async def sample_list_services(): Returns: google.cloud.metastore_v1alpha.services.dataproc_metastore.pagers.ListServicesAsyncPager: Response message for - [DataprocMetastore.ListServices][google.cloud.metastore.v1alpha.DataprocMetastore.ListServices]. + [DataprocMetastore.ListServices][google.cloud.metastore.v1alpha.DataprocMetastore.ListServices]. Iterating over this object will yield results and resolve additional pages automatically. @@ -362,11 +373,11 @@ async def sample_list_services(): async def get_service( self, - request: Union[metastore.GetServiceRequest, dict] = None, + request: Optional[Union[metastore.GetServiceRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> metastore.Service: r"""Gets the details of a single service. @@ -398,7 +409,7 @@ async def sample_get_service(): print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.GetServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.GetServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.GetService][google.cloud.metastore.v1alpha.DataprocMetastore.GetService]. name (:class:`str`): @@ -466,13 +477,13 @@ async def sample_get_service(): async def create_service( self, - request: Union[metastore.CreateServiceRequest, dict] = None, + request: Optional[Union[metastore.CreateServiceRequest, dict]] = None, *, - parent: str = None, - service: metastore.Service = None, - service_id: str = None, + parent: Optional[str] = None, + service: Optional[metastore.Service] = None, + service_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Creates a metastore service in a project and @@ -504,13 +515,13 @@ async def sample_create_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.CreateServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.CreateServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.CreateService][google.cloud.metastore.v1alpha.DataprocMetastore.CreateService]. parent (:class:`str`): @@ -617,12 +628,12 @@ async def sample_create_service(): async def update_service( self, - request: Union[metastore.UpdateServiceRequest, dict] = None, + request: Optional[Union[metastore.UpdateServiceRequest, dict]] = None, *, - service: metastore.Service = None, - update_mask: field_mask_pb2.FieldMask = None, + service: Optional[metastore.Service] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Updates the parameters of a single service. @@ -651,13 +662,13 @@ async def sample_update_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.UpdateServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.UpdateServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.UpdateService][google.cloud.metastore.v1alpha.DataprocMetastore.UpdateService]. service (:class:`google.cloud.metastore_v1alpha.types.Service`): @@ -752,11 +763,11 @@ async def sample_update_service(): async def delete_service( self, - request: Union[metastore.DeleteServiceRequest, dict] = None, + request: Optional[Union[metastore.DeleteServiceRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Deletes a single service. @@ -786,13 +797,13 @@ async def sample_delete_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.DeleteServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.DeleteServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.DeleteService][google.cloud.metastore.v1alpha.DataprocMetastore.DeleteService]. name (:class:`str`): @@ -878,11 +889,11 @@ async def sample_delete_service(): async def list_metadata_imports( self, - request: Union[metastore.ListMetadataImportsRequest, dict] = None, + request: Optional[Union[metastore.ListMetadataImportsRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListMetadataImportsAsyncPager: r"""Lists imports in a service. @@ -915,7 +926,7 @@ async def sample_list_metadata_imports(): print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.ListMetadataImportsRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.ListMetadataImportsRequest, dict]]): The request object. Request message for [DataprocMetastore.ListMetadataImports][google.cloud.metastore.v1alpha.DataprocMetastore.ListMetadataImports]. parent (:class:`str`): @@ -936,7 +947,7 @@ async def sample_list_metadata_imports(): Returns: google.cloud.metastore_v1alpha.services.dataproc_metastore.pagers.ListMetadataImportsAsyncPager: Response message for - [DataprocMetastore.ListMetadataImports][google.cloud.metastore.v1alpha.DataprocMetastore.ListMetadataImports]. + [DataprocMetastore.ListMetadataImports][google.cloud.metastore.v1alpha.DataprocMetastore.ListMetadataImports]. Iterating over this object will yield results and resolve additional pages automatically. @@ -995,11 +1006,11 @@ async def sample_list_metadata_imports(): async def get_metadata_import( self, - request: Union[metastore.GetMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.GetMetadataImportRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> metastore.MetadataImport: r"""Gets details of a single import. @@ -1031,7 +1042,7 @@ async def sample_get_metadata_import(): print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.GetMetadataImportRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.GetMetadataImportRequest, dict]]): The request object. Request message for [DataprocMetastore.GetMetadataImport][google.cloud.metastore.v1alpha.DataprocMetastore.GetMetadataImport]. name (:class:`str`): @@ -1099,13 +1110,13 @@ async def sample_get_metadata_import(): async def create_metadata_import( self, - request: Union[metastore.CreateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.CreateMetadataImportRequest, dict]] = None, *, - parent: str = None, - metadata_import: metastore.MetadataImport = None, - metadata_import_id: str = None, + parent: Optional[str] = None, + metadata_import: Optional[metastore.MetadataImport] = None, + metadata_import_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Creates a new MetadataImport in a given project and @@ -1137,13 +1148,13 @@ async def sample_create_metadata_import(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.CreateMetadataImportRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.CreateMetadataImportRequest, dict]]): The request object. Request message for [DataprocMetastore.CreateMetadataImport][google.cloud.metastore.v1alpha.DataprocMetastore.CreateMetadataImport]. parent (:class:`str`): @@ -1249,12 +1260,12 @@ async def sample_create_metadata_import(): async def update_metadata_import( self, - request: Union[metastore.UpdateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.UpdateMetadataImportRequest, dict]] = None, *, - metadata_import: metastore.MetadataImport = None, - update_mask: field_mask_pb2.FieldMask = None, + metadata_import: Optional[metastore.MetadataImport] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Updates a single import. @@ -1285,13 +1296,13 @@ async def sample_update_metadata_import(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.UpdateMetadataImportRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.UpdateMetadataImportRequest, dict]]): The request object. Request message for [DataprocMetastore.UpdateMetadataImport][google.cloud.metastore.v1alpha.DataprocMetastore.UpdateMetadataImport]. metadata_import (:class:`google.cloud.metastore_v1alpha.types.MetadataImport`): @@ -1386,10 +1397,10 @@ async def sample_update_metadata_import(): async def export_metadata( self, - request: Union[metastore.ExportMetadataRequest, dict] = None, + request: Optional[Union[metastore.ExportMetadataRequest, dict]] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Exports metadata from a service. @@ -1420,13 +1431,13 @@ async def sample_export_metadata(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.ExportMetadataRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.ExportMetadataRequest, dict]]): The request object. Request message for [DataprocMetastore.ExportMetadata][google.cloud.metastore.v1alpha.DataprocMetastore.ExportMetadata]. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1482,12 +1493,12 @@ async def sample_export_metadata(): async def restore_service( self, - request: Union[metastore.RestoreServiceRequest, dict] = None, + request: Optional[Union[metastore.RestoreServiceRequest, dict]] = None, *, - service: str = None, - backup: str = None, + service: Optional[str] = None, + backup: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Restores a service from a backup. @@ -1518,13 +1529,13 @@ async def sample_restore_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.RestoreServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.RestoreServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.Restore][]. service (:class:`str`): @@ -1614,11 +1625,11 @@ async def sample_restore_service(): async def list_backups( self, - request: Union[metastore.ListBackupsRequest, dict] = None, + request: Optional[Union[metastore.ListBackupsRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListBackupsAsyncPager: r"""Lists backups in a service. @@ -1651,7 +1662,7 @@ async def sample_list_backups(): print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.ListBackupsRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.ListBackupsRequest, dict]]): The request object. Request message for [DataprocMetastore.ListBackups][google.cloud.metastore.v1alpha.DataprocMetastore.ListBackups]. parent (:class:`str`): @@ -1672,7 +1683,7 @@ async def sample_list_backups(): Returns: google.cloud.metastore_v1alpha.services.dataproc_metastore.pagers.ListBackupsAsyncPager: Response message for - [DataprocMetastore.ListBackups][google.cloud.metastore.v1alpha.DataprocMetastore.ListBackups]. + [DataprocMetastore.ListBackups][google.cloud.metastore.v1alpha.DataprocMetastore.ListBackups]. Iterating over this object will yield results and resolve additional pages automatically. @@ -1731,11 +1742,11 @@ async def sample_list_backups(): async def get_backup( self, - request: Union[metastore.GetBackupRequest, dict] = None, + request: Optional[Union[metastore.GetBackupRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> metastore.Backup: r"""Gets details of a single backup. @@ -1767,7 +1778,7 @@ async def sample_get_backup(): print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.GetBackupRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.GetBackupRequest, dict]]): The request object. Request message for [DataprocMetastore.GetBackup][google.cloud.metastore.v1alpha.DataprocMetastore.GetBackup]. name (:class:`str`): @@ -1833,13 +1844,13 @@ async def sample_get_backup(): async def create_backup( self, - request: Union[metastore.CreateBackupRequest, dict] = None, + request: Optional[Union[metastore.CreateBackupRequest, dict]] = None, *, - parent: str = None, - backup: metastore.Backup = None, - backup_id: str = None, + parent: Optional[str] = None, + backup: Optional[metastore.Backup] = None, + backup_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Creates a new backup in a given project and location. @@ -1870,13 +1881,13 @@ async def sample_create_backup(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.CreateBackupRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.CreateBackupRequest, dict]]): The request object. Request message for [DataprocMetastore.CreateBackup][google.cloud.metastore.v1alpha.DataprocMetastore.CreateBackup]. parent (:class:`str`): @@ -1980,11 +1991,11 @@ async def sample_create_backup(): async def delete_backup( self, - request: Union[metastore.DeleteBackupRequest, dict] = None, + request: Optional[Union[metastore.DeleteBackupRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Deletes a single backup. @@ -2014,13 +2025,13 @@ async def sample_delete_backup(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.DeleteBackupRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.DeleteBackupRequest, dict]]): The request object. Request message for [DataprocMetastore.DeleteBackup][google.cloud.metastore.v1alpha.DataprocMetastore.DeleteBackup]. name (:class:`str`): @@ -2111,14 +2122,9 @@ async def __aexit__(self, exc_type, exc, tb): await self.transport.close() -try: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution( - "google-cloud-metastore", - ).version, - ) -except pkg_resources.DistributionNotFound: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) __all__ = ("DataprocMetastoreAsyncClient",) diff --git a/google/cloud/metastore_v1alpha/services/dataproc_metastore/client.py b/google/cloud/metastore_v1alpha/services/dataproc_metastore/client.py index 6c2490c..1e7ecd1 100644 --- a/google/cloud/metastore_v1alpha/services/dataproc_metastore/client.py +++ b/google/cloud/metastore_v1alpha/services/dataproc_metastore/client.py @@ -16,7 +16,18 @@ from collections import OrderedDict import os import re -from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, + cast, +) from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions @@ -27,7 +38,8 @@ from google.auth.transport import mtls # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore from google.oauth2 import service_account # type: ignore -import pkg_resources + +from google.cloud.metastore_v1alpha import gapic_version as package_version try: OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] @@ -64,7 +76,7 @@ class DataprocMetastoreClientMeta(type): def get_transport_class( cls, - label: str = None, + label: Optional[str] = None, ) -> Type[DataprocMetastoreTransport]: """Returns an appropriate transport class. @@ -472,8 +484,8 @@ def __init__( self, *, credentials: Optional[ga_credentials.Credentials] = None, - transport: Union[str, DataprocMetastoreTransport, None] = None, - client_options: Optional[client_options_lib.ClientOptions] = None, + transport: Optional[Union[str, DataprocMetastoreTransport]] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiates the dataproc metastore client. @@ -487,7 +499,7 @@ def __init__( transport (Union[str, DataprocMetastoreTransport]): The transport to use. If set to None, a transport is chosen automatically. - client_options (google.api_core.client_options.ClientOptions): Custom options for the + client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): Custom options for the client. It won't take effect if a ``transport`` instance is provided. (1) The ``api_endpoint`` property can be used to override the default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT @@ -517,6 +529,7 @@ def __init__( client_options = client_options_lib.from_dict(client_options) if client_options is None: client_options = client_options_lib.ClientOptions() + client_options = cast(client_options_lib.ClientOptions, client_options) api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source( client_options @@ -569,11 +582,11 @@ def __init__( def list_services( self, - request: Union[metastore.ListServicesRequest, dict] = None, + request: Optional[Union[metastore.ListServicesRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListServicesPager: r"""Lists services in a project and location. @@ -627,7 +640,7 @@ def sample_list_services(): Returns: google.cloud.metastore_v1alpha.services.dataproc_metastore.pagers.ListServicesPager: Response message for - [DataprocMetastore.ListServices][google.cloud.metastore.v1alpha.DataprocMetastore.ListServices]. + [DataprocMetastore.ListServices][google.cloud.metastore.v1alpha.DataprocMetastore.ListServices]. Iterating over this object will yield results and resolve additional pages automatically. @@ -686,11 +699,11 @@ def sample_list_services(): def get_service( self, - request: Union[metastore.GetServiceRequest, dict] = None, + request: Optional[Union[metastore.GetServiceRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> metastore.Service: r"""Gets the details of a single service. @@ -790,13 +803,13 @@ def sample_get_service(): def create_service( self, - request: Union[metastore.CreateServiceRequest, dict] = None, + request: Optional[Union[metastore.CreateServiceRequest, dict]] = None, *, - parent: str = None, - service: metastore.Service = None, - service_id: str = None, + parent: Optional[str] = None, + service: Optional[metastore.Service] = None, + service_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Creates a metastore service in a project and @@ -941,12 +954,12 @@ def sample_create_service(): def update_service( self, - request: Union[metastore.UpdateServiceRequest, dict] = None, + request: Optional[Union[metastore.UpdateServiceRequest, dict]] = None, *, - service: metastore.Service = None, - update_mask: field_mask_pb2.FieldMask = None, + service: Optional[metastore.Service] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Updates the parameters of a single service. @@ -1076,11 +1089,11 @@ def sample_update_service(): def delete_service( self, - request: Union[metastore.DeleteServiceRequest, dict] = None, + request: Optional[Union[metastore.DeleteServiceRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Deletes a single service. @@ -1202,11 +1215,11 @@ def sample_delete_service(): def list_metadata_imports( self, - request: Union[metastore.ListMetadataImportsRequest, dict] = None, + request: Optional[Union[metastore.ListMetadataImportsRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListMetadataImportsPager: r"""Lists imports in a service. @@ -1260,7 +1273,7 @@ def sample_list_metadata_imports(): Returns: google.cloud.metastore_v1alpha.services.dataproc_metastore.pagers.ListMetadataImportsPager: Response message for - [DataprocMetastore.ListMetadataImports][google.cloud.metastore.v1alpha.DataprocMetastore.ListMetadataImports]. + [DataprocMetastore.ListMetadataImports][google.cloud.metastore.v1alpha.DataprocMetastore.ListMetadataImports]. Iterating over this object will yield results and resolve additional pages automatically. @@ -1319,11 +1332,11 @@ def sample_list_metadata_imports(): def get_metadata_import( self, - request: Union[metastore.GetMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.GetMetadataImportRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> metastore.MetadataImport: r"""Gets details of a single import. @@ -1423,13 +1436,13 @@ def sample_get_metadata_import(): def create_metadata_import( self, - request: Union[metastore.CreateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.CreateMetadataImportRequest, dict]] = None, *, - parent: str = None, - metadata_import: metastore.MetadataImport = None, - metadata_import_id: str = None, + parent: Optional[str] = None, + metadata_import: Optional[metastore.MetadataImport] = None, + metadata_import_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Creates a new MetadataImport in a given project and @@ -1573,12 +1586,12 @@ def sample_create_metadata_import(): def update_metadata_import( self, - request: Union[metastore.UpdateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.UpdateMetadataImportRequest, dict]] = None, *, - metadata_import: metastore.MetadataImport = None, - update_mask: field_mask_pb2.FieldMask = None, + metadata_import: Optional[metastore.MetadataImport] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Updates a single import. @@ -1710,10 +1723,10 @@ def sample_update_metadata_import(): def export_metadata( self, - request: Union[metastore.ExportMetadataRequest, dict] = None, + request: Optional[Union[metastore.ExportMetadataRequest, dict]] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Exports metadata from a service. @@ -1807,12 +1820,12 @@ def sample_export_metadata(): def restore_service( self, - request: Union[metastore.RestoreServiceRequest, dict] = None, + request: Optional[Union[metastore.RestoreServiceRequest, dict]] = None, *, - service: str = None, - backup: str = None, + service: Optional[str] = None, + backup: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Restores a service from a backup. @@ -1939,11 +1952,11 @@ def sample_restore_service(): def list_backups( self, - request: Union[metastore.ListBackupsRequest, dict] = None, + request: Optional[Union[metastore.ListBackupsRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListBackupsPager: r"""Lists backups in a service. @@ -1997,7 +2010,7 @@ def sample_list_backups(): Returns: google.cloud.metastore_v1alpha.services.dataproc_metastore.pagers.ListBackupsPager: Response message for - [DataprocMetastore.ListBackups][google.cloud.metastore.v1alpha.DataprocMetastore.ListBackups]. + [DataprocMetastore.ListBackups][google.cloud.metastore.v1alpha.DataprocMetastore.ListBackups]. Iterating over this object will yield results and resolve additional pages automatically. @@ -2056,11 +2069,11 @@ def sample_list_backups(): def get_backup( self, - request: Union[metastore.GetBackupRequest, dict] = None, + request: Optional[Union[metastore.GetBackupRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> metastore.Backup: r"""Gets details of a single backup. @@ -2158,13 +2171,13 @@ def sample_get_backup(): def create_backup( self, - request: Union[metastore.CreateBackupRequest, dict] = None, + request: Optional[Union[metastore.CreateBackupRequest, dict]] = None, *, - parent: str = None, - backup: metastore.Backup = None, - backup_id: str = None, + parent: Optional[str] = None, + backup: Optional[metastore.Backup] = None, + backup_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Creates a new backup in a given project and location. @@ -2305,11 +2318,11 @@ def sample_create_backup(): def delete_backup( self, - request: Union[metastore.DeleteBackupRequest, dict] = None, + request: Optional[Union[metastore.DeleteBackupRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Deletes a single backup. @@ -2443,14 +2456,9 @@ def __exit__(self, type, value, traceback): self.transport.close() -try: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution( - "google-cloud-metastore", - ).version, - ) -except pkg_resources.DistributionNotFound: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) __all__ = ("DataprocMetastoreClient",) diff --git a/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/base.py b/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/base.py index 72a019c..e5f7538 100644 --- a/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/base.py +++ b/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/base.py @@ -24,18 +24,13 @@ from google.auth import credentials as ga_credentials # type: ignore from google.longrunning import operations_pb2 # type: ignore from google.oauth2 import service_account # type: ignore -import pkg_resources +from google.cloud.metastore_v1alpha import gapic_version as package_version from google.cloud.metastore_v1alpha.types import metastore -try: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution( - "google-cloud-metastore", - ).version, - ) -except pkg_resources.DistributionNotFound: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) class DataprocMetastoreTransport(abc.ABC): @@ -49,7 +44,7 @@ def __init__( self, *, host: str = DEFAULT_HOST, - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, diff --git a/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/grpc.py b/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/grpc.py index 3a7dc6b..7a5efa8 100644 --- a/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/grpc.py +++ b/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/grpc.py @@ -68,14 +68,14 @@ def __init__( self, *, host: str = "metastore.googleapis.com", - credentials: ga_credentials.Credentials = None, - credentials_file: str = None, - scopes: Sequence[str] = None, - channel: grpc.Channel = None, - api_mtls_endpoint: str = None, - client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, - ssl_channel_credentials: grpc.ChannelCredentials = None, - client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: Optional[grpc.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, @@ -203,8 +203,8 @@ def __init__( def create_channel( cls, host: str = "metastore.googleapis.com", - credentials: ga_credentials.Credentials = None, - credentials_file: str = None, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, **kwargs, diff --git a/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/grpc_asyncio.py b/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/grpc_asyncio.py index fb9ee88..c6ac2c1 100644 --- a/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/grpc_asyncio.py +++ b/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/grpc_asyncio.py @@ -70,7 +70,7 @@ class DataprocMetastoreGrpcAsyncIOTransport(DataprocMetastoreTransport): def create_channel( cls, host: str = "metastore.googleapis.com", - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, @@ -113,15 +113,15 @@ def __init__( self, *, host: str = "metastore.googleapis.com", - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, - channel: aio.Channel = None, - api_mtls_endpoint: str = None, - client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, - ssl_channel_credentials: grpc.ChannelCredentials = None, - client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, - quota_project_id=None, + channel: Optional[aio.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, api_audience: Optional[str] = None, diff --git a/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/__init__.py b/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/__init__.py new file mode 100644 index 0000000..6cb70e0 --- /dev/null +++ b/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from .async_client import DataprocMetastoreFederationAsyncClient +from .client import DataprocMetastoreFederationClient + +__all__ = ( + "DataprocMetastoreFederationClient", + "DataprocMetastoreFederationAsyncClient", +) diff --git a/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/async_client.py b/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/async_client.py new file mode 100644 index 0000000..6c6ca02 --- /dev/null +++ b/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/async_client.py @@ -0,0 +1,898 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from collections import OrderedDict +import functools +import re +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, +) + +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.client_options import ClientOptions +from google.auth import credentials as ga_credentials # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.cloud.metastore_v1alpha import gapic_version as package_version + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore + +from google.api_core import operation # type: ignore +from google.api_core import operation_async # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore + +from google.cloud.metastore_v1alpha.services.dataproc_metastore_federation import pagers +from google.cloud.metastore_v1alpha.types import metastore, metastore_federation + +from .client import DataprocMetastoreFederationClient +from .transports.base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport +from .transports.grpc_asyncio import DataprocMetastoreFederationGrpcAsyncIOTransport + + +class DataprocMetastoreFederationAsyncClient: + """Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + """ + + _client: DataprocMetastoreFederationClient + + DEFAULT_ENDPOINT = DataprocMetastoreFederationClient.DEFAULT_ENDPOINT + DEFAULT_MTLS_ENDPOINT = DataprocMetastoreFederationClient.DEFAULT_MTLS_ENDPOINT + + federation_path = staticmethod(DataprocMetastoreFederationClient.federation_path) + parse_federation_path = staticmethod( + DataprocMetastoreFederationClient.parse_federation_path + ) + common_billing_account_path = staticmethod( + DataprocMetastoreFederationClient.common_billing_account_path + ) + parse_common_billing_account_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_billing_account_path + ) + common_folder_path = staticmethod( + DataprocMetastoreFederationClient.common_folder_path + ) + parse_common_folder_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_folder_path + ) + common_organization_path = staticmethod( + DataprocMetastoreFederationClient.common_organization_path + ) + parse_common_organization_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_organization_path + ) + common_project_path = staticmethod( + DataprocMetastoreFederationClient.common_project_path + ) + parse_common_project_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_project_path + ) + common_location_path = staticmethod( + DataprocMetastoreFederationClient.common_location_path + ) + parse_common_location_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_location_path + ) + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationAsyncClient: The constructed client. + """ + return DataprocMetastoreFederationClient.from_service_account_info.__func__(DataprocMetastoreFederationAsyncClient, info, *args, **kwargs) # type: ignore + + @classmethod + def from_service_account_file(cls, filename: str, *args, **kwargs): + """Creates an instance of this client using the provided credentials + file. + + Args: + filename (str): The path to the service account private key json + file. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationAsyncClient: The constructed client. + """ + return DataprocMetastoreFederationClient.from_service_account_file.__func__(DataprocMetastoreFederationAsyncClient, filename, *args, **kwargs) # type: ignore + + from_service_account_json = from_service_account_file + + @classmethod + def get_mtls_endpoint_and_cert_source( + cls, client_options: Optional[ClientOptions] = None + ): + """Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variabel is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + return DataprocMetastoreFederationClient.get_mtls_endpoint_and_cert_source(client_options) # type: ignore + + @property + def transport(self) -> DataprocMetastoreFederationTransport: + """Returns the transport used by the client instance. + + Returns: + DataprocMetastoreFederationTransport: The transport used by the client instance. + """ + return self._client.transport + + get_transport_class = functools.partial( + type(DataprocMetastoreFederationClient).get_transport_class, + type(DataprocMetastoreFederationClient), + ) + + def __init__( + self, + *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Union[str, DataprocMetastoreFederationTransport] = "grpc_asyncio", + client_options: Optional[ClientOptions] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the dataproc metastore federation client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Union[str, ~.DataprocMetastoreFederationTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + client_options (ClientOptions): Custom options for the client. It + won't take effect if a ``transport`` instance is provided. + (1) The ``api_endpoint`` property can be used to override the + default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + + Raises: + google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + creation failed for any reason. + """ + self._client = DataprocMetastoreFederationClient( + credentials=credentials, + transport=transport, + client_options=client_options, + client_info=client_info, + ) + + async def list_federations( + self, + request: Optional[ + Union[metastore_federation.ListFederationsRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListFederationsAsyncPager: + r"""Lists federations in a project and location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1alpha + + async def sample_list_federations(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1alpha.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1alpha.types.ListFederationsRequest, dict]]): + The request object. Request message for ListFederations. + parent (:class:`str`): + Required. The relative resource name of the location of + metastore federations to list, in the following form: + ``projects/{project_number}/locations/{location_id}``. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1alpha.services.dataproc_metastore_federation.pagers.ListFederationsAsyncPager: + Response message for ListFederations + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.ListFederationsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_federations, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListFederationsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_federation( + self, + request: Optional[ + Union[metastore_federation.GetFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> metastore_federation.Federation: + r"""Gets the details of a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1alpha + + async def sample_get_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1alpha.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = await client.get_federation(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1alpha.types.GetFederationRequest, dict]]): + The request object. Request message for GetFederation. + name (:class:`str`): + Required. The relative resource name of the metastore + federation to retrieve, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1alpha.types.Federation: + Represents a federation of multiple + backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.GetFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def create_federation( + self, + request: Optional[ + Union[metastore_federation.CreateFederationRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + federation: Optional[metastore_federation.Federation] = None, + federation_id: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Creates a metastore federation in a project and + location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1alpha + + async def sample_create_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1alpha.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1alpha.types.CreateFederationRequest, dict]]): + The request object. Request message for + CreateFederation. + parent (:class:`str`): + Required. The relative resource name of the location in + which to create a federation service, in the following + form: + + ``projects/{project_number}/locations/{location_id}``. + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation (:class:`google.cloud.metastore_v1alpha.types.Federation`): + Required. The Metastore Federation to create. The + ``name`` field is ignored. The ID of the created + metastore federation must be provided in the request's + ``federation_id`` field. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation_id (:class:`str`): + Required. The ID of the metastore + federation, which is used as the final + component of the metastore federation's + name. + This value must be between 2 and 63 + characters long inclusive, begin with a + letter, end with a letter or number, and + consist of alpha-numeric ASCII + characters or hyphens. + + This corresponds to the ``federation_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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1alpha.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, federation, federation_id]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.CreateFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if federation is not None: + request.federation = federation + if federation_id is not None: + request.federation_id = federation_id + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.create_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + async def update_federation( + self, + request: Optional[ + Union[metastore_federation.UpdateFederationRequest, dict] + ] = None, + *, + federation: Optional[metastore_federation.Federation] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Updates the fields of a federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1alpha + + async def sample_update_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1alpha.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1alpha.types.UpdateFederationRequest, dict]]): + The request object. Request message for + UpdateFederation. + federation (:class:`google.cloud.metastore_v1alpha.types.Federation`): + Required. The metastore federation to update. The server + only merges fields in the service if they are specified + in ``update_mask``. + + The metastore federation's ``name`` field is used to + identify the metastore service to be updated. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): + Required. A field mask used to specify the fields to be + overwritten in the metastore federation resource by the + update. Fields specified in the ``update_mask`` are + relative to the resource (not to the full request). A + field is overwritten if it is in the mask. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1alpha.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([federation, update_mask]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.UpdateFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if federation is not None: + request.federation = federation + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("federation.name", request.federation.name),) + ), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + async def delete_federation( + self, + request: Optional[ + Union[metastore_federation.DeleteFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Deletes a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1alpha + + async def sample_delete_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1alpha.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1alpha.types.DeleteFederationRequest, dict]]): + The request object. Request message for + DeleteFederation. + name (:class:`str`): + Required. The relative resource name of the metastore + federation to delete, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be :class:`google.protobuf.empty_pb2.Empty` A generic empty message that you can re-use to avoid defining duplicated + empty messages in your APIs. A typical example is to + use it as the request or the response type of an API + method. For instance: + + service Foo { + rpc Bar(google.protobuf.Empty) returns + (google.protobuf.Empty); + + } + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.DeleteFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.delete_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + empty_pb2.Empty, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + async def __aenter__(self): + return self + + async def __aexit__(self, exc_type, exc, tb): + await self.transport.close() + + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) + + +__all__ = ("DataprocMetastoreFederationAsyncClient",) diff --git a/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/client.py b/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/client.py new file mode 100644 index 0000000..939da1c --- /dev/null +++ b/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/client.py @@ -0,0 +1,1129 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from collections import OrderedDict +import os +import re +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, + cast, +) + +from google.api_core import client_options as client_options_lib +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.auth import credentials as ga_credentials # type: ignore +from google.auth.exceptions import MutualTLSChannelError # type: ignore +from google.auth.transport import mtls # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.cloud.metastore_v1alpha import gapic_version as package_version + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore + +from google.api_core import operation # type: ignore +from google.api_core import operation_async # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore + +from google.cloud.metastore_v1alpha.services.dataproc_metastore_federation import pagers +from google.cloud.metastore_v1alpha.types import metastore, metastore_federation + +from .transports.base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport +from .transports.grpc import DataprocMetastoreFederationGrpcTransport +from .transports.grpc_asyncio import DataprocMetastoreFederationGrpcAsyncIOTransport + + +class DataprocMetastoreFederationClientMeta(type): + """Metaclass for the DataprocMetastoreFederation client. + + This provides class-level methods for building and retrieving + support objects (e.g. transport) without polluting the client instance + objects. + """ + + _transport_registry = ( + OrderedDict() + ) # type: Dict[str, Type[DataprocMetastoreFederationTransport]] + _transport_registry["grpc"] = DataprocMetastoreFederationGrpcTransport + _transport_registry[ + "grpc_asyncio" + ] = DataprocMetastoreFederationGrpcAsyncIOTransport + + def get_transport_class( + cls, + label: Optional[str] = None, + ) -> Type[DataprocMetastoreFederationTransport]: + """Returns an appropriate transport class. + + Args: + label: The name of the desired transport. If none is + provided, then the first transport in the registry is used. + + Returns: + The transport class to use. + """ + # If a specific transport is requested, return that one. + if label: + return cls._transport_registry[label] + + # No transport is requested; return the default (that is, the first one + # in the dictionary). + return next(iter(cls._transport_registry.values())) + + +class DataprocMetastoreFederationClient( + metaclass=DataprocMetastoreFederationClientMeta +): + """Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + """ + + @staticmethod + def _get_default_mtls_endpoint(api_endpoint): + """Converts api endpoint to mTLS endpoint. + + Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to + "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. + Args: + api_endpoint (Optional[str]): the api endpoint to convert. + Returns: + str: converted mTLS api endpoint. + """ + if not api_endpoint: + return api_endpoint + + mtls_endpoint_re = re.compile( + r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?" + ) + + m = mtls_endpoint_re.match(api_endpoint) + name, mtls, sandbox, googledomain = m.groups() + if mtls or not googledomain: + return api_endpoint + + if sandbox: + return api_endpoint.replace( + "sandbox.googleapis.com", "mtls.sandbox.googleapis.com" + ) + + return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") + + DEFAULT_ENDPOINT = "metastore.googleapis.com" + DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore + DEFAULT_ENDPOINT + ) + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_info(info) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + @classmethod + def from_service_account_file(cls, filename: str, *args, **kwargs): + """Creates an instance of this client using the provided credentials + file. + + Args: + filename (str): The path to the service account private key json + file. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_file(filename) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + from_service_account_json = from_service_account_file + + @property + def transport(self) -> DataprocMetastoreFederationTransport: + """Returns the transport used by the client instance. + + Returns: + DataprocMetastoreFederationTransport: The transport used by the client + instance. + """ + return self._transport + + @staticmethod + def federation_path( + project: str, + location: str, + federation: str, + ) -> str: + """Returns a fully-qualified federation string.""" + return ( + "projects/{project}/locations/{location}/federations/{federation}".format( + project=project, + location=location, + federation=federation, + ) + ) + + @staticmethod + def parse_federation_path(path: str) -> Dict[str, str]: + """Parses a federation path into its component segments.""" + m = re.match( + r"^projects/(?P.+?)/locations/(?P.+?)/federations/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def common_billing_account_path( + billing_account: str, + ) -> str: + """Returns a fully-qualified billing_account string.""" + return "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + + @staticmethod + def parse_common_billing_account_path(path: str) -> Dict[str, str]: + """Parse a billing_account path into its component segments.""" + m = re.match(r"^billingAccounts/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_folder_path( + folder: str, + ) -> str: + """Returns a fully-qualified folder string.""" + return "folders/{folder}".format( + folder=folder, + ) + + @staticmethod + def parse_common_folder_path(path: str) -> Dict[str, str]: + """Parse a folder path into its component segments.""" + m = re.match(r"^folders/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_organization_path( + organization: str, + ) -> str: + """Returns a fully-qualified organization string.""" + return "organizations/{organization}".format( + organization=organization, + ) + + @staticmethod + def parse_common_organization_path(path: str) -> Dict[str, str]: + """Parse a organization path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_project_path( + project: str, + ) -> str: + """Returns a fully-qualified project string.""" + return "projects/{project}".format( + project=project, + ) + + @staticmethod + def parse_common_project_path(path: str) -> Dict[str, str]: + """Parse a project path into its component segments.""" + m = re.match(r"^projects/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_location_path( + project: str, + location: str, + ) -> str: + """Returns a fully-qualified location string.""" + return "projects/{project}/locations/{location}".format( + project=project, + location=location, + ) + + @staticmethod + def parse_common_location_path(path: str) -> Dict[str, str]: + """Parse a location path into its component segments.""" + m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @classmethod + def get_mtls_endpoint_and_cert_source( + cls, client_options: Optional[client_options_lib.ClientOptions] = None + ): + """Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variabel is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + if client_options is None: + client_options = client_options_lib.ClientOptions() + use_client_cert = os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") + use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") + if use_client_cert not in ("true", "false"): + raise ValueError( + "Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`" + ) + if use_mtls_endpoint not in ("auto", "never", "always"): + raise MutualTLSChannelError( + "Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`" + ) + + # Figure out the client cert source to use. + client_cert_source = None + if use_client_cert == "true": + if client_options.client_cert_source: + client_cert_source = client_options.client_cert_source + elif mtls.has_default_client_cert_source(): + client_cert_source = mtls.default_client_cert_source() + + # Figure out which api endpoint to use. + if client_options.api_endpoint is not None: + api_endpoint = client_options.api_endpoint + elif use_mtls_endpoint == "always" or ( + use_mtls_endpoint == "auto" and client_cert_source + ): + api_endpoint = cls.DEFAULT_MTLS_ENDPOINT + else: + api_endpoint = cls.DEFAULT_ENDPOINT + + return api_endpoint, client_cert_source + + def __init__( + self, + *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Optional[Union[str, DataprocMetastoreFederationTransport]] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the dataproc metastore federation client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Union[str, DataprocMetastoreFederationTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): Custom options for the + client. It won't take effect if a ``transport`` instance is provided. + (1) The ``api_endpoint`` property can be used to override the + default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + """ + if isinstance(client_options, dict): + client_options = client_options_lib.from_dict(client_options) + if client_options is None: + client_options = client_options_lib.ClientOptions() + client_options = cast(client_options_lib.ClientOptions, client_options) + + api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source( + client_options + ) + + api_key_value = getattr(client_options, "api_key", None) + if api_key_value and credentials: + raise ValueError( + "client_options.api_key and credentials are mutually exclusive" + ) + + # Save or instantiate the transport. + # Ordinarily, we provide the transport, but allowing a custom transport + # instance provides an extensibility point for unusual situations. + if isinstance(transport, DataprocMetastoreFederationTransport): + # transport is a DataprocMetastoreFederationTransport instance. + if credentials or client_options.credentials_file or api_key_value: + raise ValueError( + "When providing a transport instance, " + "provide its credentials directly." + ) + if client_options.scopes: + raise ValueError( + "When providing a transport instance, provide its scopes " + "directly." + ) + self._transport = transport + else: + import google.auth._default # type: ignore + + if api_key_value and hasattr( + google.auth._default, "get_api_key_credentials" + ): + credentials = google.auth._default.get_api_key_credentials( + api_key_value + ) + + Transport = type(self).get_transport_class(transport) + self._transport = Transport( + credentials=credentials, + credentials_file=client_options.credentials_file, + host=api_endpoint, + scopes=client_options.scopes, + client_cert_source_for_mtls=client_cert_source_func, + quota_project_id=client_options.quota_project_id, + client_info=client_info, + always_use_jwt_access=True, + api_audience=client_options.api_audience, + ) + + def list_federations( + self, + request: Optional[ + Union[metastore_federation.ListFederationsRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListFederationsPager: + r"""Lists federations in a project and location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1alpha + + def sample_list_federations(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1alpha.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.metastore_v1alpha.types.ListFederationsRequest, dict]): + The request object. Request message for ListFederations. + parent (str): + Required. The relative resource name of the location of + metastore federations to list, in the following form: + ``projects/{project_number}/locations/{location_id}``. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1alpha.services.dataproc_metastore_federation.pagers.ListFederationsPager: + Response message for ListFederations + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.ListFederationsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.ListFederationsRequest): + request = metastore_federation.ListFederationsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_federations] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListFederationsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_federation( + self, + request: Optional[ + Union[metastore_federation.GetFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> metastore_federation.Federation: + r"""Gets the details of a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1alpha + + def sample_get_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1alpha.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = client.get_federation(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1alpha.types.GetFederationRequest, dict]): + The request object. Request message for GetFederation. + name (str): + Required. The relative resource name of the metastore + federation to retrieve, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1alpha.types.Federation: + Represents a federation of multiple + backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.GetFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.GetFederationRequest): + request = metastore_federation.GetFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def create_federation( + self, + request: Optional[ + Union[metastore_federation.CreateFederationRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + federation: Optional[metastore_federation.Federation] = None, + federation_id: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Creates a metastore federation in a project and + location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1alpha + + def sample_create_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1alpha.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1alpha.types.CreateFederationRequest, dict]): + The request object. Request message for + CreateFederation. + parent (str): + Required. The relative resource name of the location in + which to create a federation service, in the following + form: + + ``projects/{project_number}/locations/{location_id}``. + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation (google.cloud.metastore_v1alpha.types.Federation): + Required. The Metastore Federation to create. The + ``name`` field is ignored. The ID of the created + metastore federation must be provided in the request's + ``federation_id`` field. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation_id (str): + Required. The ID of the metastore + federation, which is used as the final + component of the metastore federation's + name. + This value must be between 2 and 63 + characters long inclusive, begin with a + letter, end with a letter or number, and + consist of alpha-numeric ASCII + characters or hyphens. + + This corresponds to the ``federation_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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1alpha.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, federation, federation_id]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.CreateFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.CreateFederationRequest): + request = metastore_federation.CreateFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if federation is not None: + request.federation = federation + if federation_id is not None: + request.federation_id = federation_id + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.create_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + def update_federation( + self, + request: Optional[ + Union[metastore_federation.UpdateFederationRequest, dict] + ] = None, + *, + federation: Optional[metastore_federation.Federation] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Updates the fields of a federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1alpha + + def sample_update_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1alpha.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1alpha.types.UpdateFederationRequest, dict]): + The request object. Request message for + UpdateFederation. + federation (google.cloud.metastore_v1alpha.types.Federation): + Required. The metastore federation to update. The server + only merges fields in the service if they are specified + in ``update_mask``. + + The metastore federation's ``name`` field is used to + identify the metastore service to be updated. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + Required. A field mask used to specify the fields to be + overwritten in the metastore federation resource by the + update. Fields specified in the ``update_mask`` are + relative to the resource (not to the full request). A + field is overwritten if it is in the mask. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1alpha.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([federation, update_mask]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.UpdateFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.UpdateFederationRequest): + request = metastore_federation.UpdateFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if federation is not None: + request.federation = federation + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("federation.name", request.federation.name),) + ), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + def delete_federation( + self, + request: Optional[ + Union[metastore_federation.DeleteFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Deletes a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1alpha + + def sample_delete_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1alpha.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1alpha.types.DeleteFederationRequest, dict]): + The request object. Request message for + DeleteFederation. + name (str): + Required. The relative resource name of the metastore + federation to delete, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be :class:`google.protobuf.empty_pb2.Empty` A generic empty message that you can re-use to avoid defining duplicated + empty messages in your APIs. A typical example is to + use it as the request or the response type of an API + method. For instance: + + service Foo { + rpc Bar(google.protobuf.Empty) returns + (google.protobuf.Empty); + + } + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.DeleteFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.DeleteFederationRequest): + request = metastore_federation.DeleteFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + empty_pb2.Empty, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + """Releases underlying transport's resources. + + .. warning:: + ONLY use as a context manager if the transport is NOT shared + with other clients! Exiting the with block will CLOSE the transport + and may cause errors in other clients! + """ + self.transport.close() + + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) + + +__all__ = ("DataprocMetastoreFederationClient",) diff --git a/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/pagers.py b/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/pagers.py new file mode 100644 index 0000000..6cd5483 --- /dev/null +++ b/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/pagers.py @@ -0,0 +1,157 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from typing import ( + Any, + AsyncIterator, + Awaitable, + Callable, + Iterator, + Optional, + Sequence, + Tuple, +) + +from google.cloud.metastore_v1alpha.types import metastore_federation + + +class ListFederationsPager: + """A pager for iterating through ``list_federations`` requests. + + This class thinly wraps an initial + :class:`google.cloud.metastore_v1alpha.types.ListFederationsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``federations`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListFederations`` requests and continue to iterate + through the ``federations`` field on the + corresponding responses. + + All the usual :class:`google.cloud.metastore_v1alpha.types.ListFederationsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[..., metastore_federation.ListFederationsResponse], + request: metastore_federation.ListFederationsRequest, + response: metastore_federation.ListFederationsResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.metastore_v1alpha.types.ListFederationsRequest): + The initial request object. + response (google.cloud.metastore_v1alpha.types.ListFederationsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = metastore_federation.ListFederationsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[metastore_federation.ListFederationsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[metastore_federation.Federation]: + for page in self.pages: + yield from page.federations + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + +class ListFederationsAsyncPager: + """A pager for iterating through ``list_federations`` requests. + + This class thinly wraps an initial + :class:`google.cloud.metastore_v1alpha.types.ListFederationsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``federations`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListFederations`` requests and continue to iterate + through the ``federations`` field on the + corresponding responses. + + All the usual :class:`google.cloud.metastore_v1alpha.types.ListFederationsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[..., Awaitable[metastore_federation.ListFederationsResponse]], + request: metastore_federation.ListFederationsRequest, + response: metastore_federation.ListFederationsResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.metastore_v1alpha.types.ListFederationsRequest): + The initial request object. + response (google.cloud.metastore_v1alpha.types.ListFederationsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = metastore_federation.ListFederationsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages( + self, + ) -> AsyncIterator[metastore_federation.ListFederationsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + + def __aiter__(self) -> AsyncIterator[metastore_federation.Federation]: + async def async_generator(): + async for page in self.pages: + for response in page.federations: + yield response + + return async_generator() + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) diff --git a/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/__init__.py b/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/__init__.py new file mode 100644 index 0000000..7c7e978 --- /dev/null +++ b/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/__init__.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from collections import OrderedDict +from typing import Dict, Type + +from .base import DataprocMetastoreFederationTransport +from .grpc import DataprocMetastoreFederationGrpcTransport +from .grpc_asyncio import DataprocMetastoreFederationGrpcAsyncIOTransport + +# Compile a registry of transports. +_transport_registry = ( + OrderedDict() +) # type: Dict[str, Type[DataprocMetastoreFederationTransport]] +_transport_registry["grpc"] = DataprocMetastoreFederationGrpcTransport +_transport_registry["grpc_asyncio"] = DataprocMetastoreFederationGrpcAsyncIOTransport + +__all__ = ( + "DataprocMetastoreFederationTransport", + "DataprocMetastoreFederationGrpcTransport", + "DataprocMetastoreFederationGrpcAsyncIOTransport", +) diff --git a/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/base.py b/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/base.py new file mode 100644 index 0000000..8cc8c88 --- /dev/null +++ b/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/base.py @@ -0,0 +1,222 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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 abc +from typing import Awaitable, Callable, Dict, Optional, Sequence, Union + +import google.api_core +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1, operations_v1 +from google.api_core import retry as retries +import google.auth # type: ignore +from google.auth import credentials as ga_credentials # type: ignore +from google.longrunning import operations_pb2 # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.cloud.metastore_v1alpha import gapic_version as package_version +from google.cloud.metastore_v1alpha.types import metastore_federation + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) + + +class DataprocMetastoreFederationTransport(abc.ABC): + """Abstract transport class for DataprocMetastoreFederation.""" + + AUTH_SCOPES = ("https://www.googleapis.com/auth/cloud-platform",) + + DEFAULT_HOST: str = "metastore.googleapis.com" + + def __init__( + self, + *, + host: str = DEFAULT_HOST, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + **kwargs, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A list of scopes. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + """ + + scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} + + # Save the scopes. + self._scopes = scopes + + # If no credentials are provided, then determine the appropriate + # defaults. + if credentials and credentials_file: + raise core_exceptions.DuplicateCredentialArgs( + "'credentials_file' and 'credentials' are mutually exclusive" + ) + + if credentials_file is not None: + credentials, _ = google.auth.load_credentials_from_file( + credentials_file, **scopes_kwargs, quota_project_id=quota_project_id + ) + elif credentials is None: + credentials, _ = google.auth.default( + **scopes_kwargs, quota_project_id=quota_project_id + ) + # Don't apply audience if the credentials file passed from user. + if hasattr(credentials, "with_gdch_audience"): + credentials = credentials.with_gdch_audience( + api_audience if api_audience else host + ) + + # If the credentials are service account credentials, then always try to use self signed JWT. + if ( + always_use_jwt_access + and isinstance(credentials, service_account.Credentials) + and hasattr(service_account.Credentials, "with_always_use_jwt_access") + ): + credentials = credentials.with_always_use_jwt_access(True) + + # Save the credentials. + self._credentials = credentials + + # Save the hostname. Default to port 443 (HTTPS) if none is specified. + if ":" not in host: + host += ":443" + self._host = host + + def _prep_wrapped_messages(self, client_info): + # Precompute the wrapped methods. + self._wrapped_methods = { + self.list_federations: gapic_v1.method.wrap_method( + self.list_federations, + default_timeout=None, + client_info=client_info, + ), + self.get_federation: gapic_v1.method.wrap_method( + self.get_federation, + default_timeout=None, + client_info=client_info, + ), + self.create_federation: gapic_v1.method.wrap_method( + self.create_federation, + default_timeout=None, + client_info=client_info, + ), + self.update_federation: gapic_v1.method.wrap_method( + self.update_federation, + default_timeout=None, + client_info=client_info, + ), + self.delete_federation: gapic_v1.method.wrap_method( + self.delete_federation, + default_timeout=None, + client_info=client_info, + ), + } + + def close(self): + """Closes resources associated with the transport. + + .. warning:: + Only call this method if the transport is NOT shared + with other clients - this may cause errors in other clients! + """ + raise NotImplementedError() + + @property + def operations_client(self): + """Return the client designed to process long-running operations.""" + raise NotImplementedError() + + @property + def list_federations( + self, + ) -> Callable[ + [metastore_federation.ListFederationsRequest], + Union[ + metastore_federation.ListFederationsResponse, + Awaitable[metastore_federation.ListFederationsResponse], + ], + ]: + raise NotImplementedError() + + @property + def get_federation( + self, + ) -> Callable[ + [metastore_federation.GetFederationRequest], + Union[ + metastore_federation.Federation, Awaitable[metastore_federation.Federation] + ], + ]: + raise NotImplementedError() + + @property + def create_federation( + self, + ) -> Callable[ + [metastore_federation.CreateFederationRequest], + Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], + ]: + raise NotImplementedError() + + @property + def update_federation( + self, + ) -> Callable[ + [metastore_federation.UpdateFederationRequest], + Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], + ]: + raise NotImplementedError() + + @property + def delete_federation( + self, + ) -> Callable[ + [metastore_federation.DeleteFederationRequest], + Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], + ]: + raise NotImplementedError() + + @property + def kind(self) -> str: + raise NotImplementedError() + + +__all__ = ("DataprocMetastoreFederationTransport",) diff --git a/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/grpc.py b/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/grpc.py new file mode 100644 index 0000000..545aeb7 --- /dev/null +++ b/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/grpc.py @@ -0,0 +1,411 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from typing import Callable, Dict, Optional, Sequence, Tuple, Union +import warnings + +from google.api_core import gapic_v1, grpc_helpers, operations_v1 +import google.auth # type: ignore +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.longrunning import operations_pb2 # type: ignore +import grpc # type: ignore + +from google.cloud.metastore_v1alpha.types import metastore_federation + +from .base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport + + +class DataprocMetastoreFederationGrpcTransport(DataprocMetastoreFederationTransport): + """gRPC backend transport for DataprocMetastoreFederation. + + Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + + _stubs: Dict[str, Callable] + + def __init__( + self, + *, + host: str = "metastore.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: Optional[grpc.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + channel (Optional[grpc.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or application default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for the grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure a mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + self._grpc_channel = None + self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} + self._operations_client: Optional[operations_v1.OperationsClient] = None + + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + + if channel: + # Ignore credentials if a channel was passed. + credentials = False + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + self._ssl_channel_credentials = None + + else: + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials + + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + if not self._grpc_channel: + self._grpc_channel = type(self).create_channel( + self._host, + # use the credentials which are saved + credentials=self._credentials, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, + scopes=self._scopes, + ssl_credentials=self._ssl_channel_credentials, + quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) + + @classmethod + def create_channel( + cls, + host: str = "metastore.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs, + ) -> grpc.Channel: + """Create and return a gRPC channel object. + Args: + host (Optional[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + grpc.Channel: A gRPC channel object. + + Raises: + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + + return grpc_helpers.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + quota_project_id=quota_project_id, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, + **kwargs, + ) + + @property + def grpc_channel(self) -> grpc.Channel: + """Return the channel designed to connect to this service.""" + return self._grpc_channel + + @property + def operations_client(self) -> operations_v1.OperationsClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Quick check: Only create a new client if we do not already have one. + if self._operations_client is None: + self._operations_client = operations_v1.OperationsClient(self.grpc_channel) + + # Return the client from cache. + return self._operations_client + + @property + def list_federations( + self, + ) -> Callable[ + [metastore_federation.ListFederationsRequest], + metastore_federation.ListFederationsResponse, + ]: + r"""Return a callable for the list federations method over gRPC. + + Lists federations in a project and location. + + Returns: + Callable[[~.ListFederationsRequest], + ~.ListFederationsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_federations" not in self._stubs: + self._stubs["list_federations"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1alpha.DataprocMetastoreFederation/ListFederations", + request_serializer=metastore_federation.ListFederationsRequest.serialize, + response_deserializer=metastore_federation.ListFederationsResponse.deserialize, + ) + return self._stubs["list_federations"] + + @property + def get_federation( + self, + ) -> Callable[ + [metastore_federation.GetFederationRequest], metastore_federation.Federation + ]: + r"""Return a callable for the get federation method over gRPC. + + Gets the details of a single federation. + + Returns: + Callable[[~.GetFederationRequest], + ~.Federation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_federation" not in self._stubs: + self._stubs["get_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1alpha.DataprocMetastoreFederation/GetFederation", + request_serializer=metastore_federation.GetFederationRequest.serialize, + response_deserializer=metastore_federation.Federation.deserialize, + ) + return self._stubs["get_federation"] + + @property + def create_federation( + self, + ) -> Callable[ + [metastore_federation.CreateFederationRequest], operations_pb2.Operation + ]: + r"""Return a callable for the create federation method over gRPC. + + Creates a metastore federation in a project and + location. + + Returns: + Callable[[~.CreateFederationRequest], + ~.Operation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "create_federation" not in self._stubs: + self._stubs["create_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1alpha.DataprocMetastoreFederation/CreateFederation", + request_serializer=metastore_federation.CreateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["create_federation"] + + @property + def update_federation( + self, + ) -> Callable[ + [metastore_federation.UpdateFederationRequest], operations_pb2.Operation + ]: + r"""Return a callable for the update federation method over gRPC. + + Updates the fields of a federation. + + Returns: + Callable[[~.UpdateFederationRequest], + ~.Operation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "update_federation" not in self._stubs: + self._stubs["update_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1alpha.DataprocMetastoreFederation/UpdateFederation", + request_serializer=metastore_federation.UpdateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["update_federation"] + + @property + def delete_federation( + self, + ) -> Callable[ + [metastore_federation.DeleteFederationRequest], operations_pb2.Operation + ]: + r"""Return a callable for the delete federation method over gRPC. + + Deletes a single federation. + + Returns: + Callable[[~.DeleteFederationRequest], + ~.Operation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "delete_federation" not in self._stubs: + self._stubs["delete_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1alpha.DataprocMetastoreFederation/DeleteFederation", + request_serializer=metastore_federation.DeleteFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["delete_federation"] + + def close(self): + self.grpc_channel.close() + + @property + def kind(self) -> str: + return "grpc" + + +__all__ = ("DataprocMetastoreFederationGrpcTransport",) diff --git a/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/grpc_asyncio.py b/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/grpc_asyncio.py new file mode 100644 index 0000000..0902276 --- /dev/null +++ b/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/grpc_asyncio.py @@ -0,0 +1,418 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union +import warnings + +from google.api_core import gapic_v1, grpc_helpers_async, operations_v1 +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.longrunning import operations_pb2 # type: ignore +import grpc # type: ignore +from grpc.experimental import aio # type: ignore + +from google.cloud.metastore_v1alpha.types import metastore_federation + +from .base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport +from .grpc import DataprocMetastoreFederationGrpcTransport + + +class DataprocMetastoreFederationGrpcAsyncIOTransport( + DataprocMetastoreFederationTransport +): + """gRPC AsyncIO backend transport for DataprocMetastoreFederation. + + Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + + _grpc_channel: aio.Channel + _stubs: Dict[str, Callable] = {} + + @classmethod + def create_channel( + cls, + host: str = "metastore.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs, + ) -> aio.Channel: + """Create and return a gRPC AsyncIO channel object. + Args: + host (Optional[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + aio.Channel: A gRPC AsyncIO channel object. + """ + + return grpc_helpers_async.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + quota_project_id=quota_project_id, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, + **kwargs, + ) + + def __init__( + self, + *, + host: str = "metastore.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: Optional[aio.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + channel (Optional[aio.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or application default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for the grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure a mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + + Raises: + google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + creation failed for any reason. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + self._grpc_channel = None + self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} + self._operations_client: Optional[operations_v1.OperationsAsyncClient] = None + + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + + if channel: + # Ignore credentials if a channel was passed. + credentials = False + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + self._ssl_channel_credentials = None + else: + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials + + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + if not self._grpc_channel: + self._grpc_channel = type(self).create_channel( + self._host, + # use the credentials which are saved + credentials=self._credentials, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, + scopes=self._scopes, + ssl_credentials=self._ssl_channel_credentials, + quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) + + @property + def grpc_channel(self) -> aio.Channel: + """Create the channel designed to connect to this service. + + This property caches on the instance; repeated calls return + the same channel. + """ + # Return the channel from cache. + return self._grpc_channel + + @property + def operations_client(self) -> operations_v1.OperationsAsyncClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Quick check: Only create a new client if we do not already have one. + if self._operations_client is None: + self._operations_client = operations_v1.OperationsAsyncClient( + self.grpc_channel + ) + + # Return the client from cache. + return self._operations_client + + @property + def list_federations( + self, + ) -> Callable[ + [metastore_federation.ListFederationsRequest], + Awaitable[metastore_federation.ListFederationsResponse], + ]: + r"""Return a callable for the list federations method over gRPC. + + Lists federations in a project and location. + + Returns: + Callable[[~.ListFederationsRequest], + Awaitable[~.ListFederationsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_federations" not in self._stubs: + self._stubs["list_federations"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1alpha.DataprocMetastoreFederation/ListFederations", + request_serializer=metastore_federation.ListFederationsRequest.serialize, + response_deserializer=metastore_federation.ListFederationsResponse.deserialize, + ) + return self._stubs["list_federations"] + + @property + def get_federation( + self, + ) -> Callable[ + [metastore_federation.GetFederationRequest], + Awaitable[metastore_federation.Federation], + ]: + r"""Return a callable for the get federation method over gRPC. + + Gets the details of a single federation. + + Returns: + Callable[[~.GetFederationRequest], + Awaitable[~.Federation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_federation" not in self._stubs: + self._stubs["get_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1alpha.DataprocMetastoreFederation/GetFederation", + request_serializer=metastore_federation.GetFederationRequest.serialize, + response_deserializer=metastore_federation.Federation.deserialize, + ) + return self._stubs["get_federation"] + + @property + def create_federation( + self, + ) -> Callable[ + [metastore_federation.CreateFederationRequest], + Awaitable[operations_pb2.Operation], + ]: + r"""Return a callable for the create federation method over gRPC. + + Creates a metastore federation in a project and + location. + + Returns: + Callable[[~.CreateFederationRequest], + Awaitable[~.Operation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "create_federation" not in self._stubs: + self._stubs["create_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1alpha.DataprocMetastoreFederation/CreateFederation", + request_serializer=metastore_federation.CreateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["create_federation"] + + @property + def update_federation( + self, + ) -> Callable[ + [metastore_federation.UpdateFederationRequest], + Awaitable[operations_pb2.Operation], + ]: + r"""Return a callable for the update federation method over gRPC. + + Updates the fields of a federation. + + Returns: + Callable[[~.UpdateFederationRequest], + Awaitable[~.Operation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "update_federation" not in self._stubs: + self._stubs["update_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1alpha.DataprocMetastoreFederation/UpdateFederation", + request_serializer=metastore_federation.UpdateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["update_federation"] + + @property + def delete_federation( + self, + ) -> Callable[ + [metastore_federation.DeleteFederationRequest], + Awaitable[operations_pb2.Operation], + ]: + r"""Return a callable for the delete federation method over gRPC. + + Deletes a single federation. + + Returns: + Callable[[~.DeleteFederationRequest], + Awaitable[~.Operation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "delete_federation" not in self._stubs: + self._stubs["delete_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1alpha.DataprocMetastoreFederation/DeleteFederation", + request_serializer=metastore_federation.DeleteFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["delete_federation"] + + def close(self): + return self.grpc_channel.close() + + +__all__ = ("DataprocMetastoreFederationGrpcAsyncIOTransport",) diff --git a/google/cloud/metastore_v1alpha/types/__init__.py b/google/cloud/metastore_v1alpha/types/__init__.py index 0b9817d..f98016d 100644 --- a/google/cloud/metastore_v1alpha/types/__init__.py +++ b/google/cloud/metastore_v1alpha/types/__init__.py @@ -50,9 +50,20 @@ RestoreServiceRequest, Secret, Service, + TelemetryConfig, UpdateMetadataImportRequest, UpdateServiceRequest, ) +from .metastore_federation import ( + BackendMetastore, + CreateFederationRequest, + DeleteFederationRequest, + Federation, + GetFederationRequest, + ListFederationsRequest, + ListFederationsResponse, + UpdateFederationRequest, +) __all__ = ( "AuxiliaryVersionConfig", @@ -91,6 +102,15 @@ "RestoreServiceRequest", "Secret", "Service", + "TelemetryConfig", "UpdateMetadataImportRequest", "UpdateServiceRequest", + "BackendMetastore", + "CreateFederationRequest", + "DeleteFederationRequest", + "Federation", + "GetFederationRequest", + "ListFederationsRequest", + "ListFederationsResponse", + "UpdateFederationRequest", ) diff --git a/google/cloud/metastore_v1alpha/types/metastore.py b/google/cloud/metastore_v1alpha/types/metastore.py index 4f0972e..558b09b 100644 --- a/google/cloud/metastore_v1alpha/types/metastore.py +++ b/google/cloud/metastore_v1alpha/types/metastore.py @@ -13,6 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from typing import MutableMapping, MutableSequence + from google.protobuf import field_mask_pb2 # type: ignore from google.protobuf import timestamp_pb2 # type: ignore from google.protobuf import wrappers_pb2 # type: ignore @@ -34,6 +36,7 @@ "EncryptionConfig", "AuxiliaryVersionConfig", "NetworkConfig", + "TelemetryConfig", "MetadataManagementActivity", "MetadataImport", "MetadataExport", @@ -78,7 +81,7 @@ class Service(proto.Message): This field is a member of `oneof`_ ``metastore_config``. name (str): Immutable. The relative resource name of the metastore - service, of the form: + service, in the following format: ``projects/{project_number}/locations/{location_id}/services/{service_id}``. create_time (google.protobuf.timestamp_pb2.Timestamp): @@ -87,7 +90,7 @@ class Service(proto.Message): update_time (google.protobuf.timestamp_pb2.Timestamp): Output only. The time when the metastore service was last updated. - labels (Mapping[str, str]): + labels (MutableMapping[str, str]): User-defined labels for the metastore service. network (str): @@ -140,12 +143,15 @@ class Service(proto.Message): Dataproc Metastore service to encrypt customer data at rest. Cannot be updated. network_config (google.cloud.metastore_v1alpha.types.NetworkConfig): - Immutable. The configuration specifying the - network settings for the Dataproc Metastore - service. + The configuration specifying the network + settings for the Dataproc Metastore service. database_type (google.cloud.metastore_v1alpha.types.Service.DatabaseType): Immutable. The database type that the Metastore service stores its data. + telemetry_config (google.cloud.metastore_v1alpha.types.TelemetryConfig): + The configuration specifying telemetry settings for the + Dataproc Metastore service. If unspecified defaults to + ``JSON``. """ class State(proto.Enum): @@ -181,100 +187,105 @@ class DatabaseType(proto.Enum): MYSQL = 1 SPANNER = 2 - hive_metastore_config = proto.Field( + hive_metastore_config: "HiveMetastoreConfig" = proto.Field( proto.MESSAGE, number=5, oneof="metastore_config", message="HiveMetastoreConfig", ) - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - update_time = proto.Field( + update_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=3, message=timestamp_pb2.Timestamp, ) - labels = proto.MapField( + labels: MutableMapping[str, str] = proto.MapField( proto.STRING, proto.STRING, number=4, ) - network = proto.Field( + network: str = proto.Field( proto.STRING, number=7, ) - endpoint_uri = proto.Field( + endpoint_uri: str = proto.Field( proto.STRING, number=8, ) - port = proto.Field( + port: int = proto.Field( proto.INT32, number=9, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=10, enum=State, ) - state_message = proto.Field( + state_message: str = proto.Field( proto.STRING, number=11, ) - artifact_gcs_uri = proto.Field( + artifact_gcs_uri: str = proto.Field( proto.STRING, number=12, ) - tier = proto.Field( + tier: Tier = proto.Field( proto.ENUM, number=13, enum=Tier, ) - metadata_integration = proto.Field( + metadata_integration: "MetadataIntegration" = proto.Field( proto.MESSAGE, number=14, message="MetadataIntegration", ) - maintenance_window = proto.Field( + maintenance_window: "MaintenanceWindow" = proto.Field( proto.MESSAGE, number=15, message="MaintenanceWindow", ) - uid = proto.Field( + uid: str = proto.Field( proto.STRING, number=16, ) - metadata_management_activity = proto.Field( + metadata_management_activity: "MetadataManagementActivity" = proto.Field( proto.MESSAGE, number=17, message="MetadataManagementActivity", ) - release_channel = proto.Field( + release_channel: ReleaseChannel = proto.Field( proto.ENUM, number=19, enum=ReleaseChannel, ) - encryption_config = proto.Field( + encryption_config: "EncryptionConfig" = proto.Field( proto.MESSAGE, number=20, message="EncryptionConfig", ) - network_config = proto.Field( + network_config: "NetworkConfig" = proto.Field( proto.MESSAGE, number=21, message="NetworkConfig", ) - database_type = proto.Field( + database_type: DatabaseType = proto.Field( proto.ENUM, number=22, enum=DatabaseType, ) + telemetry_config: "TelemetryConfig" = proto.Field( + proto.MESSAGE, + number=23, + message="TelemetryConfig", + ) class MetadataIntegration(proto.Message): @@ -290,12 +301,12 @@ class MetadataIntegration(proto.Message): service. """ - data_catalog_config = proto.Field( + data_catalog_config: "DataCatalogConfig" = proto.Field( proto.MESSAGE, number=1, message="DataCatalogConfig", ) - dataplex_config = proto.Field( + dataplex_config: "DataplexConfig" = proto.Field( proto.MESSAGE, number=2, message="DataplexConfig", @@ -314,7 +325,7 @@ class DataCatalogConfig(proto.Message): Catalog. """ - enabled = proto.Field( + enabled: bool = proto.Field( proto.BOOL, number=2, ) @@ -325,14 +336,14 @@ class DataplexConfig(proto.Message): the Dataplex service. Attributes: - lake_resources (Mapping[str, google.cloud.metastore_v1alpha.types.Lake]): + lake_resources (MutableMapping[str, google.cloud.metastore_v1alpha.types.Lake]): A reference to the Lake resources that this metastore service is attached to. The key is the lake resource name. Example: ``projects/{project_number}/locations/{location_id}/lakes/{lake_id}``. """ - lake_resources = proto.MapField( + lake_resources: MutableMapping[str, "Lake"] = proto.MapField( proto.STRING, proto.MESSAGE, number=1, @@ -349,7 +360,7 @@ class Lake(proto.Message): ``projects/{project_number}/locations/{location_id}/lakes/{lake_id}`` """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -367,12 +378,12 @@ class MaintenanceWindow(proto.Message): The day of week, when the window starts. """ - hour_of_day = proto.Field( + hour_of_day: wrappers_pb2.Int32Value = proto.Field( proto.MESSAGE, number=1, message=wrappers_pb2.Int32Value, ) - day_of_week = proto.Field( + day_of_week: dayofweek_pb2.DayOfWeek = proto.Field( proto.ENUM, number=2, enum=dayofweek_pb2.DayOfWeek, @@ -386,7 +397,7 @@ class HiveMetastoreConfig(proto.Message): Attributes: version (str): Immutable. The Hive metastore schema version. - config_overrides (Mapping[str, str]): + config_overrides (MutableMapping[str, str]): A mapping of Hive metastore configuration key-value pairs to apply to the Hive metastore (configured in ``hive-site.xml``). The mappings override system defaults @@ -403,7 +414,7 @@ class HiveMetastoreConfig(proto.Message): endpoint_protocol (google.cloud.metastore_v1alpha.types.HiveMetastoreConfig.EndpointProtocol): The protocol to use for the metastore service endpoint. If unspecified, defaults to ``THRIFT``. - auxiliary_versions (Mapping[str, google.cloud.metastore_v1alpha.types.AuxiliaryVersionConfig]): + auxiliary_versions (MutableMapping[str, google.cloud.metastore_v1alpha.types.AuxiliaryVersionConfig]): A mapping of Hive metastore version to the auxiliary version configuration. When specified, a secondary Hive metastore service is created along with the primary service. All @@ -424,26 +435,26 @@ class EndpointProtocol(proto.Enum): THRIFT = 1 GRPC = 2 - version = proto.Field( + version: str = proto.Field( proto.STRING, number=1, ) - config_overrides = proto.MapField( + config_overrides: MutableMapping[str, str] = proto.MapField( proto.STRING, proto.STRING, number=2, ) - kerberos_config = proto.Field( + kerberos_config: "KerberosConfig" = proto.Field( proto.MESSAGE, number=3, message="KerberosConfig", ) - endpoint_protocol = proto.Field( + endpoint_protocol: EndpointProtocol = proto.Field( proto.ENUM, number=4, enum=EndpointProtocol, ) - auxiliary_versions = proto.MapField( + auxiliary_versions: MutableMapping[str, "AuxiliaryVersionConfig"] = proto.MapField( proto.STRING, proto.MESSAGE, number=5, @@ -470,16 +481,16 @@ class KerberosConfig(proto.Message): does not need to be named krb5.conf explicitly. """ - keytab = proto.Field( + keytab: "Secret" = proto.Field( proto.MESSAGE, number=1, message="Secret", ) - principal = proto.Field( + principal: str = proto.Field( proto.STRING, number=2, ) - krb5_config_gcs_uri = proto.Field( + krb5_config_gcs_uri: str = proto.Field( proto.STRING, number=3, ) @@ -500,7 +511,7 @@ class Secret(proto.Message): This field is a member of `oneof`_ ``value``. """ - cloud_secret = proto.Field( + cloud_secret: str = proto.Field( proto.STRING, number=2, oneof="value", @@ -518,7 +529,7 @@ class EncryptionConfig(proto.Message): ``projects/{project_number}/locations/{location_id}/keyRings/{key_ring_id}/cryptoKeys/{crypto_key_id}``. """ - kms_key = proto.Field( + kms_key: str = proto.Field( proto.STRING, number=1, ) @@ -532,7 +543,7 @@ class AuxiliaryVersionConfig(proto.Message): The Hive metastore version of the auxiliary service. It must be less than the primary Hive metastore service's version. - config_overrides (Mapping[str, str]): + config_overrides (MutableMapping[str, str]): A mapping of Hive metastore configuration key-value pairs to apply to the auxiliary Hive metastore (configured in ``hive-site.xml``) in addition to the primary version's @@ -546,16 +557,16 @@ class AuxiliaryVersionConfig(proto.Message): Hive metastore service. """ - version = proto.Field( + version: str = proto.Field( proto.STRING, number=1, ) - config_overrides = proto.MapField( + config_overrides: MutableMapping[str, str] = proto.MapField( proto.STRING, proto.STRING, number=2, ) - network_config = proto.Field( + network_config: "NetworkConfig" = proto.Field( proto.MESSAGE, number=3, message="NetworkConfig", @@ -566,7 +577,7 @@ class NetworkConfig(proto.Message): r"""Network configuration for the Dataproc Metastore service. Attributes: - consumers (Sequence[google.cloud.metastore_v1alpha.types.NetworkConfig.Consumer]): + consumers (MutableSequence[google.cloud.metastore_v1alpha.types.NetworkConfig.Consumer]): Immutable. The consumer-side network configuration for the Dataproc Metastore instance. @@ -581,8 +592,8 @@ class Consumer(proto.Message): Attributes: subnetwork (str): - The subnetwork of the customer project from which an IP - address is reserved and used as the Dataproc Metastore + Immutable. The subnetwork of the customer project from which + an IP address is reserved and used as the Dataproc Metastore service's endpoint. It is accessible to hosts in the subnet and to all hosts in a subnet in the same region and same network. There must be at least one IP address available in @@ -597,41 +608,63 @@ class Consumer(proto.Message): access the metastore service. """ - subnetwork = proto.Field( + subnetwork: str = proto.Field( proto.STRING, number=1, oneof="vpc_resource", ) - endpoint_uri = proto.Field( + endpoint_uri: str = proto.Field( proto.STRING, number=3, ) - consumers = proto.RepeatedField( + consumers: MutableSequence[Consumer] = proto.RepeatedField( proto.MESSAGE, number=1, message=Consumer, ) +class TelemetryConfig(proto.Message): + r"""Telemetry Configuration for the Dataproc Metastore service. + + Attributes: + log_format (google.cloud.metastore_v1alpha.types.TelemetryConfig.LogFormat): + The output format of the Dataproc Metastore + service's logs. + """ + + class LogFormat(proto.Enum): + r"""""" + LOG_FORMAT_UNSPECIFIED = 0 + LEGACY = 1 + JSON = 2 + + log_format: LogFormat = proto.Field( + proto.ENUM, + number=1, + enum=LogFormat, + ) + + class MetadataManagementActivity(proto.Message): r"""The metadata management activities of the metastore service. Attributes: - metadata_exports (Sequence[google.cloud.metastore_v1alpha.types.MetadataExport]): + metadata_exports (MutableSequence[google.cloud.metastore_v1alpha.types.MetadataExport]): Output only. The latest metadata exports of the metastore service. - restores (Sequence[google.cloud.metastore_v1alpha.types.Restore]): + restores (MutableSequence[google.cloud.metastore_v1alpha.types.Restore]): Output only. The latest restores of the metastore service. """ - metadata_exports = proto.RepeatedField( + metadata_exports: MutableSequence["MetadataExport"] = proto.RepeatedField( proto.MESSAGE, number=1, message="MetadataExport", ) - restores = proto.RepeatedField( + restores: MutableSequence["Restore"] = proto.RepeatedField( proto.MESSAGE, number=2, message="Restore", @@ -701,55 +734,55 @@ class DatabaseType(proto.Enum): DATABASE_TYPE_UNSPECIFIED = 0 MYSQL = 1 - database_type = proto.Field( + database_type: "MetadataImport.DatabaseDump.DatabaseType" = proto.Field( proto.ENUM, number=1, enum="MetadataImport.DatabaseDump.DatabaseType", ) - gcs_uri = proto.Field( + gcs_uri: str = proto.Field( proto.STRING, number=2, ) - source_database = proto.Field( + source_database: str = proto.Field( proto.STRING, number=3, ) - type_ = proto.Field( + type_: "DatabaseDumpSpec.Type" = proto.Field( proto.ENUM, number=4, enum="DatabaseDumpSpec.Type", ) - database_dump = proto.Field( + database_dump: DatabaseDump = proto.Field( proto.MESSAGE, number=6, oneof="metadata", message=DatabaseDump, ) - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - description = proto.Field( + description: str = proto.Field( proto.STRING, number=2, ) - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=3, message=timestamp_pb2.Timestamp, ) - update_time = proto.Field( + update_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=4, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=7, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=5, enum=State, @@ -788,27 +821,27 @@ class State(proto.Enum): FAILED = 3 CANCELLED = 4 - destination_gcs_uri = proto.Field( + destination_gcs_uri: str = proto.Field( proto.STRING, number=4, oneof="destination", ) - start_time = proto.Field( + start_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=3, enum=State, ) - database_dump_type = proto.Field( + database_dump_type: "DatabaseDumpSpec.Type" = proto.Field( proto.ENUM, number=5, enum="DatabaseDumpSpec.Type", @@ -837,7 +870,7 @@ class Backup(proto.Message): the time of backup. description (str): The description of the backup. - restoring_services (Sequence[str]): + restoring_services (MutableSequence[str]): Output only. Services that are restoring from the backup. """ @@ -851,35 +884,35 @@ class State(proto.Enum): FAILED = 4 RESTORING = 5 - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=3, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=4, enum=State, ) - service_revision = proto.Field( + service_revision: "Service" = proto.Field( proto.MESSAGE, number=5, message="Service", ) - description = proto.Field( + description: str = proto.Field( proto.STRING, number=6, ) - restoring_services = proto.RepeatedField( + restoring_services: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=7, ) @@ -924,31 +957,31 @@ class RestoreType(proto.Enum): FULL = 1 METADATA_ONLY = 2 - start_time = proto.Field( + start_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=3, enum=State, ) - backup = proto.Field( + backup: str = proto.Field( proto.STRING, number=4, ) - type_ = proto.Field( + type_: RestoreType = proto.Field( proto.ENUM, number=5, enum=RestoreType, ) - details = proto.Field( + details: str = proto.Field( proto.STRING, number=6, ) @@ -991,23 +1024,23 @@ class ListServicesRequest(proto.Message): order. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - page_size = proto.Field( + page_size: int = proto.Field( proto.INT32, number=2, ) - page_token = proto.Field( + page_token: str = proto.Field( proto.STRING, number=3, ) - filter = proto.Field( + filter: str = proto.Field( proto.STRING, number=4, ) - order_by = proto.Field( + order_by: str = proto.Field( proto.STRING, number=5, ) @@ -1018,13 +1051,13 @@ class ListServicesResponse(proto.Message): [DataprocMetastore.ListServices][google.cloud.metastore.v1alpha.DataprocMetastore.ListServices]. Attributes: - services (Sequence[google.cloud.metastore_v1alpha.types.Service]): + services (MutableSequence[google.cloud.metastore_v1alpha.types.Service]): The services in the specified location. next_page_token (str): A token that can be sent as ``page_token`` to retrieve the next page. If this field is omitted, there are no subsequent pages. - unreachable (Sequence[str]): + unreachable (MutableSequence[str]): Locations that could not be reached. """ @@ -1032,16 +1065,16 @@ class ListServicesResponse(proto.Message): def raw_page(self): return self - services = proto.RepeatedField( + services: MutableSequence["Service"] = proto.RepeatedField( proto.MESSAGE, number=1, message="Service", ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - unreachable = proto.RepeatedField( + unreachable: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=3, ) @@ -1059,7 +1092,7 @@ class GetServiceRequest(proto.Message): ``projects/{project_number}/locations/{location_id}/services/{service_id}``. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -1105,20 +1138,20 @@ class CreateServiceRequest(proto.Message): supported. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - service_id = proto.Field( + service_id: str = proto.Field( proto.STRING, number=2, ) - service = proto.Field( + service: "Service" = proto.Field( proto.MESSAGE, number=3, message="Service", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -1160,17 +1193,17 @@ class UpdateServiceRequest(proto.Message): supported. """ - update_mask = proto.Field( + update_mask: field_mask_pb2.FieldMask = proto.Field( proto.MESSAGE, number=1, message=field_mask_pb2.FieldMask, ) - service = proto.Field( + service: "Service" = proto.Field( proto.MESSAGE, number=2, message="Service", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=3, ) @@ -1204,11 +1237,11 @@ class DeleteServiceRequest(proto.Message): supported. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=2, ) @@ -1251,23 +1284,23 @@ class ListMetadataImportsRequest(proto.Message): order. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - page_size = proto.Field( + page_size: int = proto.Field( proto.INT32, number=2, ) - page_token = proto.Field( + page_token: str = proto.Field( proto.STRING, number=3, ) - filter = proto.Field( + filter: str = proto.Field( proto.STRING, number=4, ) - order_by = proto.Field( + order_by: str = proto.Field( proto.STRING, number=5, ) @@ -1278,13 +1311,13 @@ class ListMetadataImportsResponse(proto.Message): [DataprocMetastore.ListMetadataImports][google.cloud.metastore.v1alpha.DataprocMetastore.ListMetadataImports]. Attributes: - metadata_imports (Sequence[google.cloud.metastore_v1alpha.types.MetadataImport]): + metadata_imports (MutableSequence[google.cloud.metastore_v1alpha.types.MetadataImport]): The imports in the specified service. next_page_token (str): A token that can be sent as ``page_token`` to retrieve the next page. If this field is omitted, there are no subsequent pages. - unreachable (Sequence[str]): + unreachable (MutableSequence[str]): Locations that could not be reached. """ @@ -1292,16 +1325,16 @@ class ListMetadataImportsResponse(proto.Message): def raw_page(self): return self - metadata_imports = proto.RepeatedField( + metadata_imports: MutableSequence["MetadataImport"] = proto.RepeatedField( proto.MESSAGE, number=1, message="MetadataImport", ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - unreachable = proto.RepeatedField( + unreachable: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=3, ) @@ -1319,7 +1352,7 @@ class GetMetadataImportRequest(proto.Message): ``projects/{project_number}/locations/{location_id}/services/{service_id}/metadataImports/{import_id}``. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -1365,20 +1398,20 @@ class CreateMetadataImportRequest(proto.Message): supported. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - metadata_import_id = proto.Field( + metadata_import_id: str = proto.Field( proto.STRING, number=2, ) - metadata_import = proto.Field( + metadata_import: "MetadataImport" = proto.Field( proto.MESSAGE, number=3, message="MetadataImport", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -1420,17 +1453,17 @@ class UpdateMetadataImportRequest(proto.Message): supported. """ - update_mask = proto.Field( + update_mask: field_mask_pb2.FieldMask = proto.Field( proto.MESSAGE, number=1, message=field_mask_pb2.FieldMask, ) - metadata_import = proto.Field( + metadata_import: "MetadataImport" = proto.Field( proto.MESSAGE, number=2, message="MetadataImport", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=3, ) @@ -1473,23 +1506,23 @@ class ListBackupsRequest(proto.Message): order. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - page_size = proto.Field( + page_size: int = proto.Field( proto.INT32, number=2, ) - page_token = proto.Field( + page_token: str = proto.Field( proto.STRING, number=3, ) - filter = proto.Field( + filter: str = proto.Field( proto.STRING, number=4, ) - order_by = proto.Field( + order_by: str = proto.Field( proto.STRING, number=5, ) @@ -1500,13 +1533,13 @@ class ListBackupsResponse(proto.Message): [DataprocMetastore.ListBackups][google.cloud.metastore.v1alpha.DataprocMetastore.ListBackups]. Attributes: - backups (Sequence[google.cloud.metastore_v1alpha.types.Backup]): + backups (MutableSequence[google.cloud.metastore_v1alpha.types.Backup]): The backups of the specified service. next_page_token (str): A token that can be sent as ``page_token`` to retrieve the next page. If this field is omitted, there are no subsequent pages. - unreachable (Sequence[str]): + unreachable (MutableSequence[str]): Locations that could not be reached. """ @@ -1514,16 +1547,16 @@ class ListBackupsResponse(proto.Message): def raw_page(self): return self - backups = proto.RepeatedField( + backups: MutableSequence["Backup"] = proto.RepeatedField( proto.MESSAGE, number=1, message="Backup", ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - unreachable = proto.RepeatedField( + unreachable: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=3, ) @@ -1541,7 +1574,7 @@ class GetBackupRequest(proto.Message): ``projects/{project_number}/locations/{location_id}/services/{service_id}/backups/{backup_id}``. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -1587,20 +1620,20 @@ class CreateBackupRequest(proto.Message): supported. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - backup_id = proto.Field( + backup_id: str = proto.Field( proto.STRING, number=2, ) - backup = proto.Field( + backup: "Backup" = proto.Field( proto.MESSAGE, number=3, message="Backup", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -1634,11 +1667,11 @@ class DeleteBackupRequest(proto.Message): supported. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=2, ) @@ -1685,20 +1718,20 @@ class ExportMetadataRequest(proto.Message): defaults to ``MYSQL``. """ - destination_gcs_folder = proto.Field( + destination_gcs_folder: str = proto.Field( proto.STRING, number=2, oneof="destination", ) - service = proto.Field( + service: str = proto.Field( proto.STRING, number=1, ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=3, ) - database_dump_type = proto.Field( + database_dump_type: "DatabaseDumpSpec.Type" = proto.Field( proto.ENUM, number=4, enum="DatabaseDumpSpec.Type", @@ -1740,20 +1773,20 @@ class RestoreServiceRequest(proto.Message): supported. """ - service = proto.Field( + service: str = proto.Field( proto.STRING, number=1, ) - backup = proto.Field( + backup: str = proto.Field( proto.STRING, number=2, ) - restore_type = proto.Field( + restore_type: "Restore.RestoreType" = proto.Field( proto.ENUM, number=3, enum="Restore.RestoreType", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -1789,33 +1822,33 @@ class OperationMetadata(proto.Message): operation. """ - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - target = proto.Field( + target: str = proto.Field( proto.STRING, number=3, ) - verb = proto.Field( + verb: str = proto.Field( proto.STRING, number=4, ) - status_message = proto.Field( + status_message: str = proto.Field( proto.STRING, number=5, ) - requested_cancellation = proto.Field( + requested_cancellation: bool = proto.Field( proto.BOOL, number=6, ) - api_version = proto.Field( + api_version: str = proto.Field( proto.STRING, number=7, ) @@ -1825,7 +1858,7 @@ class LocationMetadata(proto.Message): r"""Metadata about the service in a location. Attributes: - supported_hive_metastore_versions (Sequence[google.cloud.metastore_v1alpha.types.LocationMetadata.HiveMetastoreVersion]): + supported_hive_metastore_versions (MutableSequence[google.cloud.metastore_v1alpha.types.LocationMetadata.HiveMetastoreVersion]): The versions of Hive Metastore that can be used when creating a new metastore service in this location. The server guarantees that exactly one ``HiveMetastoreVersion`` @@ -1846,16 +1879,18 @@ class HiveMetastoreVersion(proto.Message): that omits the ``version``. """ - version = proto.Field( + version: str = proto.Field( proto.STRING, number=1, ) - is_default = proto.Field( + is_default: bool = proto.Field( proto.BOOL, number=2, ) - supported_hive_metastore_versions = proto.RepeatedField( + supported_hive_metastore_versions: MutableSequence[ + HiveMetastoreVersion + ] = proto.RepeatedField( proto.MESSAGE, number=1, message=HiveMetastoreVersion, diff --git a/google/cloud/metastore_v1alpha/types/metastore_federation.py b/google/cloud/metastore_v1alpha/types/metastore_federation.py new file mode 100644 index 0000000..e5568e1 --- /dev/null +++ b/google/cloud/metastore_v1alpha/types/metastore_federation.py @@ -0,0 +1,432 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from typing import MutableMapping, MutableSequence + +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore +import proto # type: ignore + +__protobuf__ = proto.module( + package="google.cloud.metastore.v1alpha", + manifest={ + "Federation", + "BackendMetastore", + "ListFederationsRequest", + "ListFederationsResponse", + "GetFederationRequest", + "CreateFederationRequest", + "UpdateFederationRequest", + "DeleteFederationRequest", + }, +) + + +class Federation(proto.Message): + r"""Represents a federation of multiple backend metastores. + + Attributes: + name (str): + Immutable. The relative resource name of the federation, of + the form: + projects/{project_number}/locations/{location_id}/federations/{federation_id}`. + create_time (google.protobuf.timestamp_pb2.Timestamp): + Output only. The time when the metastore + federation was created. + update_time (google.protobuf.timestamp_pb2.Timestamp): + Output only. The time when the metastore + federation was last updated. + labels (MutableMapping[str, str]): + User-defined labels for the metastore + federation. + version (str): + Immutable. The Apache Hive metastore version + of the federation. All backend metastore + versions must be compatible with the federation + version. + backend_metastores (MutableMapping[int, google.cloud.metastore_v1alpha.types.BackendMetastore]): + A map from ``BackendMetastore`` rank to + ``BackendMetastore``\ s from which the federation service + serves metadata at query time. The map key represents the + order in which ``BackendMetastore``\ s should be evaluated + to resolve database names at query time and should be + greater than or equal to zero. A ``BackendMetastore`` with a + lower number will be evaluated before a ``BackendMetastore`` + with a higher number. + endpoint_uri (str): + Output only. The federation endpoint. + state (google.cloud.metastore_v1alpha.types.Federation.State): + Output only. The current state of the + federation. + state_message (str): + Output only. Additional information about the + current state of the metastore federation, if + available. + uid (str): + Output only. The globally unique resource + identifier of the metastore federation. + """ + + class State(proto.Enum): + r"""The current state of the federation.""" + STATE_UNSPECIFIED = 0 + CREATING = 1 + ACTIVE = 2 + UPDATING = 3 + DELETING = 4 + ERROR = 5 + + name: str = proto.Field( + proto.STRING, + number=1, + ) + create_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=2, + message=timestamp_pb2.Timestamp, + ) + update_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=3, + message=timestamp_pb2.Timestamp, + ) + labels: MutableMapping[str, str] = proto.MapField( + proto.STRING, + proto.STRING, + number=4, + ) + version: str = proto.Field( + proto.STRING, + number=5, + ) + backend_metastores: MutableMapping[int, "BackendMetastore"] = proto.MapField( + proto.INT32, + proto.MESSAGE, + number=6, + message="BackendMetastore", + ) + endpoint_uri: str = proto.Field( + proto.STRING, + number=7, + ) + state: State = proto.Field( + proto.ENUM, + number=8, + enum=State, + ) + state_message: str = proto.Field( + proto.STRING, + number=9, + ) + uid: str = proto.Field( + proto.STRING, + number=10, + ) + + +class BackendMetastore(proto.Message): + r"""Represents a backend metastore for the federation. + + Attributes: + name (str): + The relative resource name of the metastore that is being + federated. The formats of the relative resource names for + the currently supported metastores are listed below: + + - Dataplex + + - ``projects/{project_id}/locations/{location}/lakes/{lake_id}`` + + - BigQuery + + - ``projects/{project_id}`` + + - Dataproc Metastore + + - ``projects/{project_id}/locations/{location}/services/{service_id}`` + metastore_type (google.cloud.metastore_v1alpha.types.BackendMetastore.MetastoreType): + The type of the backend metastore. + """ + + class MetastoreType(proto.Enum): + r"""The type of the backend metastore.""" + METASTORE_TYPE_UNSPECIFIED = 0 + BIGQUERY = 2 + DATAPROC_METASTORE = 3 + + name: str = proto.Field( + proto.STRING, + number=1, + ) + metastore_type: MetastoreType = proto.Field( + proto.ENUM, + number=2, + enum=MetastoreType, + ) + + +class ListFederationsRequest(proto.Message): + r"""Request message for ListFederations. + + Attributes: + parent (str): + Required. The relative resource name of the location of + metastore federations to list, in the following form: + ``projects/{project_number}/locations/{location_id}``. + page_size (int): + Optional. The maximum number of federations + to return. The response may contain less than + the maximum number. If unspecified, no more than + 500 services are returned. The maximum value is + 1000; values above 1000 are changed to 1000. + page_token (str): + Optional. A page token, received from a + previous ListFederationServices call. Provide + this token to retrieve the subsequent page. + To retrieve the first page, supply an empty page + token. + When paginating, other parameters provided to + ListFederationServices must match the call that + provided the page token. + filter (str): + Optional. The filter to apply to list + results. + order_by (str): + Optional. Specify the ordering of results as described in + `Sorting + Order `__. + If not specified, the results will be sorted in the default + order. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + page_size: int = proto.Field( + proto.INT32, + number=2, + ) + page_token: str = proto.Field( + proto.STRING, + number=3, + ) + filter: str = proto.Field( + proto.STRING, + number=4, + ) + order_by: str = proto.Field( + proto.STRING, + number=5, + ) + + +class ListFederationsResponse(proto.Message): + r"""Response message for ListFederations + + Attributes: + federations (MutableSequence[google.cloud.metastore_v1alpha.types.Federation]): + The services in the specified location. + next_page_token (str): + A token that can be sent as ``page_token`` to retrieve the + next page. If this field is omitted, there are no subsequent + pages. + unreachable (MutableSequence[str]): + Locations that could not be reached. + """ + + @property + def raw_page(self): + return self + + federations: MutableSequence["Federation"] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message="Federation", + ) + next_page_token: str = proto.Field( + proto.STRING, + number=2, + ) + unreachable: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=3, + ) + + +class GetFederationRequest(proto.Message): + r"""Request message for GetFederation. + + Attributes: + name (str): + Required. The relative resource name of the metastore + federation to retrieve, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class CreateFederationRequest(proto.Message): + r"""Request message for CreateFederation. + + Attributes: + parent (str): + Required. The relative resource name of the location in + which to create a federation service, in the following form: + + ``projects/{project_number}/locations/{location_id}``. + federation_id (str): + Required. The ID of the metastore federation, + which is used as the final component of the + metastore federation's name. + This value must be between 2 and 63 characters + long inclusive, begin with a letter, end with a + letter or number, and consist of alpha-numeric + ASCII characters or hyphens. + federation (google.cloud.metastore_v1alpha.types.Federation): + Required. The Metastore Federation to create. The ``name`` + field is ignored. The ID of the created metastore federation + must be provided in the request's ``federation_id`` field. + request_id (str): + Optional. A request ID. Specify a unique request ID to allow + the server to ignore the request if it has completed. The + server will ignore subsequent requests that provide a + duplicate request ID for at least 60 minutes after the first + request. + + For example, if an initial request times out, followed by + another request with the same request ID, the server ignores + the second request to prevent the creation of duplicate + commitments. + + The request ID must be a valid + `UUID `__ + A zero UUID (00000000-0000-0000-0000-000000000000) is not + supported. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + federation_id: str = proto.Field( + proto.STRING, + number=2, + ) + federation: "Federation" = proto.Field( + proto.MESSAGE, + number=3, + message="Federation", + ) + request_id: str = proto.Field( + proto.STRING, + number=4, + ) + + +class UpdateFederationRequest(proto.Message): + r"""Request message for UpdateFederation. + + Attributes: + update_mask (google.protobuf.field_mask_pb2.FieldMask): + Required. A field mask used to specify the fields to be + overwritten in the metastore federation resource by the + update. Fields specified in the ``update_mask`` are relative + to the resource (not to the full request). A field is + overwritten if it is in the mask. + federation (google.cloud.metastore_v1alpha.types.Federation): + Required. The metastore federation to update. The server + only merges fields in the service if they are specified in + ``update_mask``. + + The metastore federation's ``name`` field is used to + identify the metastore service to be updated. + request_id (str): + Optional. A request ID. Specify a unique request ID to allow + the server to ignore the request if it has completed. The + server will ignore subsequent requests that provide a + duplicate request ID for at least 60 minutes after the first + request. + + For example, if an initial request times out, followed by + another request with the same request ID, the server ignores + the second request to prevent the creation of duplicate + commitments. + + The request ID must be a valid + `UUID `__ + A zero UUID (00000000-0000-0000-0000-000000000000) is not + supported. + """ + + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=1, + message=field_mask_pb2.FieldMask, + ) + federation: "Federation" = proto.Field( + proto.MESSAGE, + number=2, + message="Federation", + ) + request_id: str = proto.Field( + proto.STRING, + number=3, + ) + + +class DeleteFederationRequest(proto.Message): + r"""Request message for DeleteFederation. + + Attributes: + name (str): + Required. The relative resource name of the metastore + federation to delete, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + request_id (str): + Optional. A request ID. Specify a unique request ID to allow + the server to ignore the request if it has completed. The + server will ignore subsequent requests that provide a + duplicate request ID for at least 60 minutes after the first + request. + + For example, if an initial request times out, followed by + another request with the same request ID, the server ignores + the second request to prevent the creation of duplicate + commitments. + + The request ID must be a valid + `UUID `__ + A zero UUID (00000000-0000-0000-0000-000000000000) is not + supported. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + request_id: str = proto.Field( + proto.STRING, + number=2, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/google/cloud/metastore_v1beta/__init__.py b/google/cloud/metastore_v1beta/__init__.py index 066e7c5..dd8a32d 100644 --- a/google/cloud/metastore_v1beta/__init__.py +++ b/google/cloud/metastore_v1beta/__init__.py @@ -13,26 +13,38 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from google.cloud.metastore import gapic_version as package_version + +__version__ = package_version.__version__ + from .services.dataproc_metastore import ( DataprocMetastoreAsyncClient, DataprocMetastoreClient, ) +from .services.dataproc_metastore_federation import ( + DataprocMetastoreFederationAsyncClient, + DataprocMetastoreFederationClient, +) from .types.metastore import ( + AuxiliaryVersionConfig, Backup, CreateBackupRequest, CreateMetadataImportRequest, CreateServiceRequest, DatabaseDumpSpec, DataCatalogConfig, + DataplexConfig, DeleteBackupRequest, DeleteServiceRequest, + EncryptionConfig, ExportMetadataRequest, GetBackupRequest, GetMetadataImportRequest, GetServiceRequest, HiveMetastoreConfig, KerberosConfig, + Lake, ListBackupsRequest, ListBackupsResponse, ListMetadataImportsRequest, @@ -45,34 +57,59 @@ MetadataImport, MetadataIntegration, MetadataManagementActivity, + NetworkConfig, OperationMetadata, Restore, RestoreServiceRequest, Secret, Service, + TelemetryConfig, UpdateMetadataImportRequest, UpdateServiceRequest, ) +from .types.metastore_federation import ( + BackendMetastore, + CreateFederationRequest, + DeleteFederationRequest, + Federation, + GetFederationRequest, + ListFederationsRequest, + ListFederationsResponse, + UpdateFederationRequest, +) __all__ = ( "DataprocMetastoreAsyncClient", + "DataprocMetastoreFederationAsyncClient", + "AuxiliaryVersionConfig", + "BackendMetastore", "Backup", "CreateBackupRequest", + "CreateFederationRequest", "CreateMetadataImportRequest", "CreateServiceRequest", "DataCatalogConfig", "DatabaseDumpSpec", + "DataplexConfig", "DataprocMetastoreClient", + "DataprocMetastoreFederationClient", "DeleteBackupRequest", + "DeleteFederationRequest", "DeleteServiceRequest", + "EncryptionConfig", "ExportMetadataRequest", + "Federation", "GetBackupRequest", + "GetFederationRequest", "GetMetadataImportRequest", "GetServiceRequest", "HiveMetastoreConfig", "KerberosConfig", + "Lake", "ListBackupsRequest", "ListBackupsResponse", + "ListFederationsRequest", + "ListFederationsResponse", "ListMetadataImportsRequest", "ListMetadataImportsResponse", "ListServicesRequest", @@ -83,11 +120,14 @@ "MetadataImport", "MetadataIntegration", "MetadataManagementActivity", + "NetworkConfig", "OperationMetadata", "Restore", "RestoreServiceRequest", "Secret", "Service", + "TelemetryConfig", + "UpdateFederationRequest", "UpdateMetadataImportRequest", "UpdateServiceRequest", ) diff --git a/google/cloud/metastore_v1beta/gapic_metadata.json b/google/cloud/metastore_v1beta/gapic_metadata.json index eca2df9..7eb1fc2 100644 --- a/google/cloud/metastore_v1beta/gapic_metadata.json +++ b/google/cloud/metastore_v1beta/gapic_metadata.json @@ -168,6 +168,70 @@ } } } + }, + "DataprocMetastoreFederation": { + "clients": { + "grpc": { + "libraryClient": "DataprocMetastoreFederationClient", + "rpcs": { + "CreateFederation": { + "methods": [ + "create_federation" + ] + }, + "DeleteFederation": { + "methods": [ + "delete_federation" + ] + }, + "GetFederation": { + "methods": [ + "get_federation" + ] + }, + "ListFederations": { + "methods": [ + "list_federations" + ] + }, + "UpdateFederation": { + "methods": [ + "update_federation" + ] + } + } + }, + "grpc-async": { + "libraryClient": "DataprocMetastoreFederationAsyncClient", + "rpcs": { + "CreateFederation": { + "methods": [ + "create_federation" + ] + }, + "DeleteFederation": { + "methods": [ + "delete_federation" + ] + }, + "GetFederation": { + "methods": [ + "get_federation" + ] + }, + "ListFederations": { + "methods": [ + "list_federations" + ] + }, + "UpdateFederation": { + "methods": [ + "update_federation" + ] + } + } + } + } } } } diff --git a/google/cloud/metastore_v1beta/gapic_version.py b/google/cloud/metastore_v1beta/gapic_version.py new file mode 100644 index 0000000..f033c61 --- /dev/null +++ b/google/cloud/metastore_v1beta/gapic_version.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +__version__ = "1.7.0" # {x-release-please-version} diff --git a/google/cloud/metastore_v1beta/services/dataproc_metastore/async_client.py b/google/cloud/metastore_v1beta/services/dataproc_metastore/async_client.py index 44b25df..3317d81 100644 --- a/google/cloud/metastore_v1beta/services/dataproc_metastore/async_client.py +++ b/google/cloud/metastore_v1beta/services/dataproc_metastore/async_client.py @@ -16,7 +16,17 @@ from collections import OrderedDict import functools import re -from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, +) from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1 @@ -24,7 +34,8 @@ from google.api_core.client_options import ClientOptions from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore -import pkg_resources + +from google.cloud.metastore_v1beta import gapic_version as package_version try: OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] @@ -47,12 +58,11 @@ class DataprocMetastoreAsyncClient: """Configures and manages metastore services. Metastore services are - fully managed, highly available, auto-scaled, auto-healing, - OSS-native deployments of technical metadata management software. - Each metastore service exposes a network endpoint through which - metadata queries are served. Metadata queries can originate from a - variety of sources, including Apache Hive, Apache Presto, and Apache - Spark. + fully managed, highly available, autoscaled, autohealing, OSS-native + deployments of technical metadata management software. Each + metastore service exposes a network endpoint through which metadata + queries are served. Metadata queries can originate from a variety of + sources, including Apache Hive, Apache Presto, and Apache Spark. The Dataproc Metastore API defines the following resource model: @@ -78,6 +88,8 @@ class DataprocMetastoreAsyncClient: backup_path = staticmethod(DataprocMetastoreClient.backup_path) parse_backup_path = staticmethod(DataprocMetastoreClient.parse_backup_path) + lake_path = staticmethod(DataprocMetastoreClient.lake_path) + parse_lake_path = staticmethod(DataprocMetastoreClient.parse_lake_path) metadata_import_path = staticmethod(DataprocMetastoreClient.metadata_import_path) parse_metadata_import_path = staticmethod( DataprocMetastoreClient.parse_metadata_import_path @@ -86,6 +98,8 @@ class DataprocMetastoreAsyncClient: parse_network_path = staticmethod(DataprocMetastoreClient.parse_network_path) service_path = staticmethod(DataprocMetastoreClient.service_path) parse_service_path = staticmethod(DataprocMetastoreClient.parse_service_path) + subnetwork_path = staticmethod(DataprocMetastoreClient.subnetwork_path) + parse_subnetwork_path = staticmethod(DataprocMetastoreClient.parse_subnetwork_path) common_billing_account_path = staticmethod( DataprocMetastoreClient.common_billing_account_path ) @@ -196,9 +210,9 @@ def transport(self) -> DataprocMetastoreTransport: def __init__( self, *, - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, transport: Union[str, DataprocMetastoreTransport] = "grpc_asyncio", - client_options: ClientOptions = None, + client_options: Optional[ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiates the dataproc metastore client. @@ -242,11 +256,11 @@ def __init__( async def list_services( self, - request: Union[metastore.ListServicesRequest, dict] = None, + request: Optional[Union[metastore.ListServicesRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListServicesAsyncPager: r"""Lists services in a project and location. @@ -279,7 +293,7 @@ async def sample_list_services(): print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.ListServicesRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.ListServicesRequest, dict]]): The request object. Request message for [DataprocMetastore.ListServices][google.cloud.metastore.v1beta.DataprocMetastore.ListServices]. parent (:class:`str`): @@ -359,11 +373,11 @@ async def sample_list_services(): async def get_service( self, - request: Union[metastore.GetServiceRequest, dict] = None, + request: Optional[Union[metastore.GetServiceRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> metastore.Service: r"""Gets the details of a single service. @@ -395,7 +409,7 @@ async def sample_get_service(): print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.GetServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.GetServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.GetService][google.cloud.metastore.v1beta.DataprocMetastore.GetService]. name (:class:`str`): @@ -463,13 +477,13 @@ async def sample_get_service(): async def create_service( self, - request: Union[metastore.CreateServiceRequest, dict] = None, + request: Optional[Union[metastore.CreateServiceRequest, dict]] = None, *, - parent: str = None, - service: metastore.Service = None, - service_id: str = None, + parent: Optional[str] = None, + service: Optional[metastore.Service] = None, + service_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Creates a metastore service in a project and @@ -501,13 +515,13 @@ async def sample_create_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.CreateServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.CreateServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.CreateService][google.cloud.metastore.v1beta.DataprocMetastore.CreateService]. parent (:class:`str`): @@ -614,12 +628,12 @@ async def sample_create_service(): async def update_service( self, - request: Union[metastore.UpdateServiceRequest, dict] = None, + request: Optional[Union[metastore.UpdateServiceRequest, dict]] = None, *, - service: metastore.Service = None, - update_mask: field_mask_pb2.FieldMask = None, + service: Optional[metastore.Service] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Updates the parameters of a single service. @@ -648,13 +662,13 @@ async def sample_update_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.UpdateServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.UpdateServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.UpdateService][google.cloud.metastore.v1beta.DataprocMetastore.UpdateService]. service (:class:`google.cloud.metastore_v1beta.types.Service`): @@ -749,11 +763,11 @@ async def sample_update_service(): async def delete_service( self, - request: Union[metastore.DeleteServiceRequest, dict] = None, + request: Optional[Union[metastore.DeleteServiceRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Deletes a single service. @@ -783,13 +797,13 @@ async def sample_delete_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.DeleteServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.DeleteServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.DeleteService][google.cloud.metastore.v1beta.DataprocMetastore.DeleteService]. name (:class:`str`): @@ -875,11 +889,11 @@ async def sample_delete_service(): async def list_metadata_imports( self, - request: Union[metastore.ListMetadataImportsRequest, dict] = None, + request: Optional[Union[metastore.ListMetadataImportsRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListMetadataImportsAsyncPager: r"""Lists imports in a service. @@ -912,7 +926,7 @@ async def sample_list_metadata_imports(): print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.ListMetadataImportsRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.ListMetadataImportsRequest, dict]]): The request object. Request message for [DataprocMetastore.ListMetadataImports][google.cloud.metastore.v1beta.DataprocMetastore.ListMetadataImports]. parent (:class:`str`): @@ -992,11 +1006,11 @@ async def sample_list_metadata_imports(): async def get_metadata_import( self, - request: Union[metastore.GetMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.GetMetadataImportRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> metastore.MetadataImport: r"""Gets details of a single import. @@ -1028,7 +1042,7 @@ async def sample_get_metadata_import(): print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.GetMetadataImportRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.GetMetadataImportRequest, dict]]): The request object. Request message for [DataprocMetastore.GetMetadataImport][google.cloud.metastore.v1beta.DataprocMetastore.GetMetadataImport]. name (:class:`str`): @@ -1096,13 +1110,13 @@ async def sample_get_metadata_import(): async def create_metadata_import( self, - request: Union[metastore.CreateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.CreateMetadataImportRequest, dict]] = None, *, - parent: str = None, - metadata_import: metastore.MetadataImport = None, - metadata_import_id: str = None, + parent: Optional[str] = None, + metadata_import: Optional[metastore.MetadataImport] = None, + metadata_import_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Creates a new MetadataImport in a given project and @@ -1134,13 +1148,13 @@ async def sample_create_metadata_import(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.CreateMetadataImportRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.CreateMetadataImportRequest, dict]]): The request object. Request message for [DataprocMetastore.CreateMetadataImport][google.cloud.metastore.v1beta.DataprocMetastore.CreateMetadataImport]. parent (:class:`str`): @@ -1148,7 +1162,7 @@ async def sample_create_metadata_import(): which to create a metastore import, in the following form: - ``projects/{project_number}/locations/{location_id}/services/{service_id}`` + ``projects/{project_number}/locations/{location_id}/services/{service_id}``. This corresponds to the ``parent`` field on the ``request`` instance; if ``request`` is provided, this @@ -1246,12 +1260,12 @@ async def sample_create_metadata_import(): async def update_metadata_import( self, - request: Union[metastore.UpdateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.UpdateMetadataImportRequest, dict]] = None, *, - metadata_import: metastore.MetadataImport = None, - update_mask: field_mask_pb2.FieldMask = None, + metadata_import: Optional[metastore.MetadataImport] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Updates a single import. @@ -1282,13 +1296,13 @@ async def sample_update_metadata_import(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.UpdateMetadataImportRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.UpdateMetadataImportRequest, dict]]): The request object. Request message for [DataprocMetastore.UpdateMetadataImport][google.cloud.metastore.v1beta.DataprocMetastore.UpdateMetadataImport]. metadata_import (:class:`google.cloud.metastore_v1beta.types.MetadataImport`): @@ -1383,10 +1397,10 @@ async def sample_update_metadata_import(): async def export_metadata( self, - request: Union[metastore.ExportMetadataRequest, dict] = None, + request: Optional[Union[metastore.ExportMetadataRequest, dict]] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Exports metadata from a service. @@ -1417,13 +1431,13 @@ async def sample_export_metadata(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.ExportMetadataRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.ExportMetadataRequest, dict]]): The request object. Request message for [DataprocMetastore.ExportMetadata][google.cloud.metastore.v1beta.DataprocMetastore.ExportMetadata]. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1479,12 +1493,12 @@ async def sample_export_metadata(): async def restore_service( self, - request: Union[metastore.RestoreServiceRequest, dict] = None, + request: Optional[Union[metastore.RestoreServiceRequest, dict]] = None, *, - service: str = None, - backup: str = None, + service: Optional[str] = None, + backup: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Restores a service from a backup. @@ -1515,20 +1529,20 @@ async def sample_restore_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.RestoreServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.RestoreServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.Restore][]. service (:class:`str`): Required. The relative resource name of the metastore service to run restore, in the following form: - ``projects/{project_id}/locations/{location_id}/services/{service_id}`` + ``projects/{project_id}/locations/{location_id}/services/{service_id}``. This corresponds to the ``service`` field on the ``request`` instance; if ``request`` is provided, this @@ -1537,7 +1551,7 @@ async def sample_restore_service(): Required. The relative resource name of the metastore service backup to restore from, in the following form: - ``projects/{project_id}/locations/{location_id}/services/{service_id}/backups/{backup_id}`` + ``projects/{project_id}/locations/{location_id}/services/{service_id}/backups/{backup_id}``. This corresponds to the ``backup`` field on the ``request`` instance; if ``request`` is provided, this @@ -1611,11 +1625,11 @@ async def sample_restore_service(): async def list_backups( self, - request: Union[metastore.ListBackupsRequest, dict] = None, + request: Optional[Union[metastore.ListBackupsRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListBackupsAsyncPager: r"""Lists backups in a service. @@ -1648,7 +1662,7 @@ async def sample_list_backups(): print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.ListBackupsRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.ListBackupsRequest, dict]]): The request object. Request message for [DataprocMetastore.ListBackups][google.cloud.metastore.v1beta.DataprocMetastore.ListBackups]. parent (:class:`str`): @@ -1728,11 +1742,11 @@ async def sample_list_backups(): async def get_backup( self, - request: Union[metastore.GetBackupRequest, dict] = None, + request: Optional[Union[metastore.GetBackupRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> metastore.Backup: r"""Gets details of a single backup. @@ -1764,7 +1778,7 @@ async def sample_get_backup(): print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.GetBackupRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.GetBackupRequest, dict]]): The request object. Request message for [DataprocMetastore.GetBackup][google.cloud.metastore.v1beta.DataprocMetastore.GetBackup]. name (:class:`str`): @@ -1830,16 +1844,16 @@ async def sample_get_backup(): async def create_backup( self, - request: Union[metastore.CreateBackupRequest, dict] = None, + request: Optional[Union[metastore.CreateBackupRequest, dict]] = None, *, - parent: str = None, - backup: metastore.Backup = None, - backup_id: str = None, + parent: Optional[str] = None, + backup: Optional[metastore.Backup] = None, + backup_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: - r"""Creates a new Backup in a given project and location. + r"""Creates a new backup in a given project and location. .. code-block:: python @@ -1867,20 +1881,20 @@ async def sample_create_backup(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.CreateBackupRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.CreateBackupRequest, dict]]): The request object. Request message for [DataprocMetastore.CreateBackup][google.cloud.metastore.v1beta.DataprocMetastore.CreateBackup]. parent (:class:`str`): Required. The relative resource name of the service in which to create a backup of the following form: - ``projects/{project_number}/locations/{location_id}/services/{service_id}`` + ``projects/{project_number}/locations/{location_id}/services/{service_id}``. This corresponds to the ``parent`` field on the ``request`` instance; if ``request`` is provided, this @@ -1977,11 +1991,11 @@ async def sample_create_backup(): async def delete_backup( self, - request: Union[metastore.DeleteBackupRequest, dict] = None, + request: Optional[Union[metastore.DeleteBackupRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Deletes a single backup. @@ -2011,13 +2025,13 @@ async def sample_delete_backup(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.DeleteBackupRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.DeleteBackupRequest, dict]]): The request object. Request message for [DataprocMetastore.DeleteBackup][google.cloud.metastore.v1beta.DataprocMetastore.DeleteBackup]. name (:class:`str`): @@ -2108,14 +2122,9 @@ async def __aexit__(self, exc_type, exc, tb): await self.transport.close() -try: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution( - "google-cloud-dataproc-metastore", - ).version, - ) -except pkg_resources.DistributionNotFound: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) __all__ = ("DataprocMetastoreAsyncClient",) diff --git a/google/cloud/metastore_v1beta/services/dataproc_metastore/client.py b/google/cloud/metastore_v1beta/services/dataproc_metastore/client.py index b9fb046..4b32834 100644 --- a/google/cloud/metastore_v1beta/services/dataproc_metastore/client.py +++ b/google/cloud/metastore_v1beta/services/dataproc_metastore/client.py @@ -16,7 +16,18 @@ from collections import OrderedDict import os import re -from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, + cast, +) from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions @@ -27,7 +38,8 @@ from google.auth.transport import mtls # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore from google.oauth2 import service_account # type: ignore -import pkg_resources + +from google.cloud.metastore_v1beta import gapic_version as package_version try: OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] @@ -64,7 +76,7 @@ class DataprocMetastoreClientMeta(type): def get_transport_class( cls, - label: str = None, + label: Optional[str] = None, ) -> Type[DataprocMetastoreTransport]: """Returns an appropriate transport class. @@ -86,12 +98,11 @@ def get_transport_class( class DataprocMetastoreClient(metaclass=DataprocMetastoreClientMeta): """Configures and manages metastore services. Metastore services are - fully managed, highly available, auto-scaled, auto-healing, - OSS-native deployments of technical metadata management software. - Each metastore service exposes a network endpoint through which - metadata queries are served. Metadata queries can originate from a - variety of sources, including Apache Hive, Apache Presto, and Apache - Spark. + fully managed, highly available, autoscaled, autohealing, OSS-native + deployments of technical metadata management software. Each + metastore service exposes a network endpoint through which metadata + queries are served. Metadata queries can originate from a variety of + sources, including Apache Hive, Apache Presto, and Apache Spark. The Dataproc Metastore API defines the following resource model: @@ -216,6 +227,28 @@ def parse_backup_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def lake_path( + project: str, + location: str, + lake: str, + ) -> str: + """Returns a fully-qualified lake string.""" + return "projects/{project}/locations/{location}/lakes/{lake}".format( + project=project, + location=location, + lake=lake, + ) + + @staticmethod + def parse_lake_path(path: str) -> Dict[str, str]: + """Parses a lake path into its component segments.""" + m = re.match( + r"^projects/(?P.+?)/locations/(?P.+?)/lakes/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def metadata_import_path( project: str, @@ -281,6 +314,28 @@ def parse_service_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def subnetwork_path( + project: str, + region: str, + subnetwork: str, + ) -> str: + """Returns a fully-qualified subnetwork string.""" + return "projects/{project}/regions/{region}/subnetworks/{subnetwork}".format( + project=project, + region=region, + subnetwork=subnetwork, + ) + + @staticmethod + def parse_subnetwork_path(path: str) -> Dict[str, str]: + """Parses a subnetwork path into its component segments.""" + m = re.match( + r"^projects/(?P.+?)/regions/(?P.+?)/subnetworks/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def common_billing_account_path( billing_account: str, @@ -429,8 +484,8 @@ def __init__( self, *, credentials: Optional[ga_credentials.Credentials] = None, - transport: Union[str, DataprocMetastoreTransport, None] = None, - client_options: Optional[client_options_lib.ClientOptions] = None, + transport: Optional[Union[str, DataprocMetastoreTransport]] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiates the dataproc metastore client. @@ -444,7 +499,7 @@ def __init__( transport (Union[str, DataprocMetastoreTransport]): The transport to use. If set to None, a transport is chosen automatically. - client_options (google.api_core.client_options.ClientOptions): Custom options for the + client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): Custom options for the client. It won't take effect if a ``transport`` instance is provided. (1) The ``api_endpoint`` property can be used to override the default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT @@ -474,6 +529,7 @@ def __init__( client_options = client_options_lib.from_dict(client_options) if client_options is None: client_options = client_options_lib.ClientOptions() + client_options = cast(client_options_lib.ClientOptions, client_options) api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source( client_options @@ -526,11 +582,11 @@ def __init__( def list_services( self, - request: Union[metastore.ListServicesRequest, dict] = None, + request: Optional[Union[metastore.ListServicesRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListServicesPager: r"""Lists services in a project and location. @@ -643,11 +699,11 @@ def sample_list_services(): def get_service( self, - request: Union[metastore.GetServiceRequest, dict] = None, + request: Optional[Union[metastore.GetServiceRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> metastore.Service: r"""Gets the details of a single service. @@ -747,13 +803,13 @@ def sample_get_service(): def create_service( self, - request: Union[metastore.CreateServiceRequest, dict] = None, + request: Optional[Union[metastore.CreateServiceRequest, dict]] = None, *, - parent: str = None, - service: metastore.Service = None, - service_id: str = None, + parent: Optional[str] = None, + service: Optional[metastore.Service] = None, + service_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Creates a metastore service in a project and @@ -898,12 +954,12 @@ def sample_create_service(): def update_service( self, - request: Union[metastore.UpdateServiceRequest, dict] = None, + request: Optional[Union[metastore.UpdateServiceRequest, dict]] = None, *, - service: metastore.Service = None, - update_mask: field_mask_pb2.FieldMask = None, + service: Optional[metastore.Service] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Updates the parameters of a single service. @@ -1033,11 +1089,11 @@ def sample_update_service(): def delete_service( self, - request: Union[metastore.DeleteServiceRequest, dict] = None, + request: Optional[Union[metastore.DeleteServiceRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Deletes a single service. @@ -1159,11 +1215,11 @@ def sample_delete_service(): def list_metadata_imports( self, - request: Union[metastore.ListMetadataImportsRequest, dict] = None, + request: Optional[Union[metastore.ListMetadataImportsRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListMetadataImportsPager: r"""Lists imports in a service. @@ -1276,11 +1332,11 @@ def sample_list_metadata_imports(): def get_metadata_import( self, - request: Union[metastore.GetMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.GetMetadataImportRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> metastore.MetadataImport: r"""Gets details of a single import. @@ -1380,13 +1436,13 @@ def sample_get_metadata_import(): def create_metadata_import( self, - request: Union[metastore.CreateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.CreateMetadataImportRequest, dict]] = None, *, - parent: str = None, - metadata_import: metastore.MetadataImport = None, - metadata_import_id: str = None, + parent: Optional[str] = None, + metadata_import: Optional[metastore.MetadataImport] = None, + metadata_import_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Creates a new MetadataImport in a given project and @@ -1432,7 +1488,7 @@ def sample_create_metadata_import(): which to create a metastore import, in the following form: - ``projects/{project_number}/locations/{location_id}/services/{service_id}`` + ``projects/{project_number}/locations/{location_id}/services/{service_id}``. This corresponds to the ``parent`` field on the ``request`` instance; if ``request`` is provided, this @@ -1530,12 +1586,12 @@ def sample_create_metadata_import(): def update_metadata_import( self, - request: Union[metastore.UpdateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.UpdateMetadataImportRequest, dict]] = None, *, - metadata_import: metastore.MetadataImport = None, - update_mask: field_mask_pb2.FieldMask = None, + metadata_import: Optional[metastore.MetadataImport] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Updates a single import. @@ -1667,10 +1723,10 @@ def sample_update_metadata_import(): def export_metadata( self, - request: Union[metastore.ExportMetadataRequest, dict] = None, + request: Optional[Union[metastore.ExportMetadataRequest, dict]] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Exports metadata from a service. @@ -1764,12 +1820,12 @@ def sample_export_metadata(): def restore_service( self, - request: Union[metastore.RestoreServiceRequest, dict] = None, + request: Optional[Union[metastore.RestoreServiceRequest, dict]] = None, *, - service: str = None, - backup: str = None, + service: Optional[str] = None, + backup: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Restores a service from a backup. @@ -1813,7 +1869,7 @@ def sample_restore_service(): Required. The relative resource name of the metastore service to run restore, in the following form: - ``projects/{project_id}/locations/{location_id}/services/{service_id}`` + ``projects/{project_id}/locations/{location_id}/services/{service_id}``. This corresponds to the ``service`` field on the ``request`` instance; if ``request`` is provided, this @@ -1822,7 +1878,7 @@ def sample_restore_service(): Required. The relative resource name of the metastore service backup to restore from, in the following form: - ``projects/{project_id}/locations/{location_id}/services/{service_id}/backups/{backup_id}`` + ``projects/{project_id}/locations/{location_id}/services/{service_id}/backups/{backup_id}``. This corresponds to the ``backup`` field on the ``request`` instance; if ``request`` is provided, this @@ -1896,11 +1952,11 @@ def sample_restore_service(): def list_backups( self, - request: Union[metastore.ListBackupsRequest, dict] = None, + request: Optional[Union[metastore.ListBackupsRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListBackupsPager: r"""Lists backups in a service. @@ -2013,11 +2069,11 @@ def sample_list_backups(): def get_backup( self, - request: Union[metastore.GetBackupRequest, dict] = None, + request: Optional[Union[metastore.GetBackupRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> metastore.Backup: r"""Gets details of a single backup. @@ -2115,16 +2171,16 @@ def sample_get_backup(): def create_backup( self, - request: Union[metastore.CreateBackupRequest, dict] = None, + request: Optional[Union[metastore.CreateBackupRequest, dict]] = None, *, - parent: str = None, - backup: metastore.Backup = None, - backup_id: str = None, + parent: Optional[str] = None, + backup: Optional[metastore.Backup] = None, + backup_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: - r"""Creates a new Backup in a given project and location. + r"""Creates a new backup in a given project and location. .. code-block:: python @@ -2165,7 +2221,7 @@ def sample_create_backup(): Required. The relative resource name of the service in which to create a backup of the following form: - ``projects/{project_number}/locations/{location_id}/services/{service_id}`` + ``projects/{project_number}/locations/{location_id}/services/{service_id}``. This corresponds to the ``parent`` field on the ``request`` instance; if ``request`` is provided, this @@ -2262,11 +2318,11 @@ def sample_create_backup(): def delete_backup( self, - request: Union[metastore.DeleteBackupRequest, dict] = None, + request: Optional[Union[metastore.DeleteBackupRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Deletes a single backup. @@ -2400,14 +2456,9 @@ def __exit__(self, type, value, traceback): self.transport.close() -try: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution( - "google-cloud-dataproc-metastore", - ).version, - ) -except pkg_resources.DistributionNotFound: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) __all__ = ("DataprocMetastoreClient",) diff --git a/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/base.py b/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/base.py index 99ae689..fe5440c 100644 --- a/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/base.py +++ b/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/base.py @@ -24,18 +24,13 @@ from google.auth import credentials as ga_credentials # type: ignore from google.longrunning import operations_pb2 # type: ignore from google.oauth2 import service_account # type: ignore -import pkg_resources +from google.cloud.metastore_v1beta import gapic_version as package_version from google.cloud.metastore_v1beta.types import metastore -try: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=pkg_resources.get_distribution( - "google-cloud-dataproc-metastore", - ).version, - ) -except pkg_resources.DistributionNotFound: - DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) class DataprocMetastoreTransport(abc.ABC): @@ -49,7 +44,7 @@ def __init__( self, *, host: str = DEFAULT_HOST, - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, diff --git a/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/grpc.py b/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/grpc.py index 6c0d6d5..1a6c677 100644 --- a/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/grpc.py +++ b/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/grpc.py @@ -32,12 +32,11 @@ class DataprocMetastoreGrpcTransport(DataprocMetastoreTransport): """gRPC backend transport for DataprocMetastore. Configures and manages metastore services. Metastore services are - fully managed, highly available, auto-scaled, auto-healing, - OSS-native deployments of technical metadata management software. - Each metastore service exposes a network endpoint through which - metadata queries are served. Metadata queries can originate from a - variety of sources, including Apache Hive, Apache Presto, and Apache - Spark. + fully managed, highly available, autoscaled, autohealing, OSS-native + deployments of technical metadata management software. Each + metastore service exposes a network endpoint through which metadata + queries are served. Metadata queries can originate from a variety of + sources, including Apache Hive, Apache Presto, and Apache Spark. The Dataproc Metastore API defines the following resource model: @@ -69,14 +68,14 @@ def __init__( self, *, host: str = "metastore.googleapis.com", - credentials: ga_credentials.Credentials = None, - credentials_file: str = None, - scopes: Sequence[str] = None, - channel: grpc.Channel = None, - api_mtls_endpoint: str = None, - client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, - ssl_channel_credentials: grpc.ChannelCredentials = None, - client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: Optional[grpc.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, @@ -204,8 +203,8 @@ def __init__( def create_channel( cls, host: str = "metastore.googleapis.com", - credentials: ga_credentials.Credentials = None, - credentials_file: str = None, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, **kwargs, @@ -612,7 +611,7 @@ def create_backup( ) -> Callable[[metastore.CreateBackupRequest], operations_pb2.Operation]: r"""Return a callable for the create backup method over gRPC. - Creates a new Backup in a given project and location. + Creates a new backup in a given project and location. Returns: Callable[[~.CreateBackupRequest], diff --git a/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/grpc_asyncio.py b/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/grpc_asyncio.py index cd274b4..daeb19a 100644 --- a/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/grpc_asyncio.py +++ b/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/grpc_asyncio.py @@ -33,12 +33,11 @@ class DataprocMetastoreGrpcAsyncIOTransport(DataprocMetastoreTransport): """gRPC AsyncIO backend transport for DataprocMetastore. Configures and manages metastore services. Metastore services are - fully managed, highly available, auto-scaled, auto-healing, - OSS-native deployments of technical metadata management software. - Each metastore service exposes a network endpoint through which - metadata queries are served. Metadata queries can originate from a - variety of sources, including Apache Hive, Apache Presto, and Apache - Spark. + fully managed, highly available, autoscaled, autohealing, OSS-native + deployments of technical metadata management software. Each + metastore service exposes a network endpoint through which metadata + queries are served. Metadata queries can originate from a variety of + sources, including Apache Hive, Apache Presto, and Apache Spark. The Dataproc Metastore API defines the following resource model: @@ -71,7 +70,7 @@ class DataprocMetastoreGrpcAsyncIOTransport(DataprocMetastoreTransport): def create_channel( cls, host: str = "metastore.googleapis.com", - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, @@ -114,15 +113,15 @@ def __init__( self, *, host: str = "metastore.googleapis.com", - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, - channel: aio.Channel = None, - api_mtls_endpoint: str = None, - client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, - ssl_channel_credentials: grpc.ChannelCredentials = None, - client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, - quota_project_id=None, + channel: Optional[aio.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, api_audience: Optional[str] = None, @@ -642,7 +641,7 @@ def create_backup( ) -> Callable[[metastore.CreateBackupRequest], Awaitable[operations_pb2.Operation]]: r"""Return a callable for the create backup method over gRPC. - Creates a new Backup in a given project and location. + Creates a new backup in a given project and location. Returns: Callable[[~.CreateBackupRequest], diff --git a/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/__init__.py b/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/__init__.py new file mode 100644 index 0000000..6cb70e0 --- /dev/null +++ b/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from .async_client import DataprocMetastoreFederationAsyncClient +from .client import DataprocMetastoreFederationClient + +__all__ = ( + "DataprocMetastoreFederationClient", + "DataprocMetastoreFederationAsyncClient", +) diff --git a/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/async_client.py b/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/async_client.py new file mode 100644 index 0000000..12fcf40 --- /dev/null +++ b/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/async_client.py @@ -0,0 +1,898 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from collections import OrderedDict +import functools +import re +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, +) + +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.client_options import ClientOptions +from google.auth import credentials as ga_credentials # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.cloud.metastore_v1beta import gapic_version as package_version + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore + +from google.api_core import operation # type: ignore +from google.api_core import operation_async # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore + +from google.cloud.metastore_v1beta.services.dataproc_metastore_federation import pagers +from google.cloud.metastore_v1beta.types import metastore, metastore_federation + +from .client import DataprocMetastoreFederationClient +from .transports.base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport +from .transports.grpc_asyncio import DataprocMetastoreFederationGrpcAsyncIOTransport + + +class DataprocMetastoreFederationAsyncClient: + """Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + """ + + _client: DataprocMetastoreFederationClient + + DEFAULT_ENDPOINT = DataprocMetastoreFederationClient.DEFAULT_ENDPOINT + DEFAULT_MTLS_ENDPOINT = DataprocMetastoreFederationClient.DEFAULT_MTLS_ENDPOINT + + federation_path = staticmethod(DataprocMetastoreFederationClient.federation_path) + parse_federation_path = staticmethod( + DataprocMetastoreFederationClient.parse_federation_path + ) + common_billing_account_path = staticmethod( + DataprocMetastoreFederationClient.common_billing_account_path + ) + parse_common_billing_account_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_billing_account_path + ) + common_folder_path = staticmethod( + DataprocMetastoreFederationClient.common_folder_path + ) + parse_common_folder_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_folder_path + ) + common_organization_path = staticmethod( + DataprocMetastoreFederationClient.common_organization_path + ) + parse_common_organization_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_organization_path + ) + common_project_path = staticmethod( + DataprocMetastoreFederationClient.common_project_path + ) + parse_common_project_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_project_path + ) + common_location_path = staticmethod( + DataprocMetastoreFederationClient.common_location_path + ) + parse_common_location_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_location_path + ) + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationAsyncClient: The constructed client. + """ + return DataprocMetastoreFederationClient.from_service_account_info.__func__(DataprocMetastoreFederationAsyncClient, info, *args, **kwargs) # type: ignore + + @classmethod + def from_service_account_file(cls, filename: str, *args, **kwargs): + """Creates an instance of this client using the provided credentials + file. + + Args: + filename (str): The path to the service account private key json + file. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationAsyncClient: The constructed client. + """ + return DataprocMetastoreFederationClient.from_service_account_file.__func__(DataprocMetastoreFederationAsyncClient, filename, *args, **kwargs) # type: ignore + + from_service_account_json = from_service_account_file + + @classmethod + def get_mtls_endpoint_and_cert_source( + cls, client_options: Optional[ClientOptions] = None + ): + """Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variabel is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + return DataprocMetastoreFederationClient.get_mtls_endpoint_and_cert_source(client_options) # type: ignore + + @property + def transport(self) -> DataprocMetastoreFederationTransport: + """Returns the transport used by the client instance. + + Returns: + DataprocMetastoreFederationTransport: The transport used by the client instance. + """ + return self._client.transport + + get_transport_class = functools.partial( + type(DataprocMetastoreFederationClient).get_transport_class, + type(DataprocMetastoreFederationClient), + ) + + def __init__( + self, + *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Union[str, DataprocMetastoreFederationTransport] = "grpc_asyncio", + client_options: Optional[ClientOptions] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the dataproc metastore federation client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Union[str, ~.DataprocMetastoreFederationTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + client_options (ClientOptions): Custom options for the client. It + won't take effect if a ``transport`` instance is provided. + (1) The ``api_endpoint`` property can be used to override the + default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + + Raises: + google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + creation failed for any reason. + """ + self._client = DataprocMetastoreFederationClient( + credentials=credentials, + transport=transport, + client_options=client_options, + client_info=client_info, + ) + + async def list_federations( + self, + request: Optional[ + Union[metastore_federation.ListFederationsRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListFederationsAsyncPager: + r"""Lists federations in a project and location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1beta + + async def sample_list_federations(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1beta.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1beta.types.ListFederationsRequest, dict]]): + The request object. Request message for ListFederations. + parent (:class:`str`): + Required. The relative resource name of the location of + metastore federations to list, in the following form: + ``projects/{project_number}/locations/{location_id}``. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1beta.services.dataproc_metastore_federation.pagers.ListFederationsAsyncPager: + Response message for ListFederations + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.ListFederationsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_federations, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListFederationsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_federation( + self, + request: Optional[ + Union[metastore_federation.GetFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> metastore_federation.Federation: + r"""Gets the details of a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1beta + + async def sample_get_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1beta.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = await client.get_federation(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1beta.types.GetFederationRequest, dict]]): + The request object. Request message for GetFederation. + name (:class:`str`): + Required. The relative resource name of the metastore + federation to retrieve, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1beta.types.Federation: + Represents a federation of multiple + backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.GetFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def create_federation( + self, + request: Optional[ + Union[metastore_federation.CreateFederationRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + federation: Optional[metastore_federation.Federation] = None, + federation_id: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Creates a metastore federation in a project and + location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1beta + + async def sample_create_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1beta.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1beta.types.CreateFederationRequest, dict]]): + The request object. Request message for + CreateFederation. + parent (:class:`str`): + Required. The relative resource name of the location in + which to create a federation service, in the following + form: + + ``projects/{project_number}/locations/{location_id}``. + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation (:class:`google.cloud.metastore_v1beta.types.Federation`): + Required. The Metastore Federation to create. The + ``name`` field is ignored. The ID of the created + metastore federation must be provided in the request's + ``federation_id`` field. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation_id (:class:`str`): + Required. The ID of the metastore + federation, which is used as the final + component of the metastore federation's + name. + This value must be between 2 and 63 + characters long inclusive, begin with a + letter, end with a letter or number, and + consist of alpha-numeric ASCII + characters or hyphens. + + This corresponds to the ``federation_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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1beta.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, federation, federation_id]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.CreateFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if federation is not None: + request.federation = federation + if federation_id is not None: + request.federation_id = federation_id + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.create_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + async def update_federation( + self, + request: Optional[ + Union[metastore_federation.UpdateFederationRequest, dict] + ] = None, + *, + federation: Optional[metastore_federation.Federation] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Updates the fields of a federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1beta + + async def sample_update_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1beta.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1beta.types.UpdateFederationRequest, dict]]): + The request object. Request message for + UpdateFederation. + federation (:class:`google.cloud.metastore_v1beta.types.Federation`): + Required. The metastore federation to update. The server + only merges fields in the service if they are specified + in ``update_mask``. + + The metastore federation's ``name`` field is used to + identify the metastore service to be updated. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): + Required. A field mask used to specify the fields to be + overwritten in the metastore federation resource by the + update. Fields specified in the ``update_mask`` are + relative to the resource (not to the full request). A + field is overwritten if it is in the mask. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1beta.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([federation, update_mask]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.UpdateFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if federation is not None: + request.federation = federation + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("federation.name", request.federation.name),) + ), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + async def delete_federation( + self, + request: Optional[ + Union[metastore_federation.DeleteFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Deletes a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1beta + + async def sample_delete_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1beta.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1beta.types.DeleteFederationRequest, dict]]): + The request object. Request message for + DeleteFederation. + name (:class:`str`): + Required. The relative resource name of the metastore + federation to delete, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be :class:`google.protobuf.empty_pb2.Empty` A generic empty message that you can re-use to avoid defining duplicated + empty messages in your APIs. A typical example is to + use it as the request or the response type of an API + method. For instance: + + service Foo { + rpc Bar(google.protobuf.Empty) returns + (google.protobuf.Empty); + + } + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.DeleteFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.delete_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + empty_pb2.Empty, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + async def __aenter__(self): + return self + + async def __aexit__(self, exc_type, exc, tb): + await self.transport.close() + + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) + + +__all__ = ("DataprocMetastoreFederationAsyncClient",) diff --git a/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/client.py b/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/client.py new file mode 100644 index 0000000..21939f3 --- /dev/null +++ b/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/client.py @@ -0,0 +1,1129 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from collections import OrderedDict +import os +import re +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, + cast, +) + +from google.api_core import client_options as client_options_lib +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.auth import credentials as ga_credentials # type: ignore +from google.auth.exceptions import MutualTLSChannelError # type: ignore +from google.auth.transport import mtls # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.cloud.metastore_v1beta import gapic_version as package_version + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore + +from google.api_core import operation # type: ignore +from google.api_core import operation_async # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore + +from google.cloud.metastore_v1beta.services.dataproc_metastore_federation import pagers +from google.cloud.metastore_v1beta.types import metastore, metastore_federation + +from .transports.base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport +from .transports.grpc import DataprocMetastoreFederationGrpcTransport +from .transports.grpc_asyncio import DataprocMetastoreFederationGrpcAsyncIOTransport + + +class DataprocMetastoreFederationClientMeta(type): + """Metaclass for the DataprocMetastoreFederation client. + + This provides class-level methods for building and retrieving + support objects (e.g. transport) without polluting the client instance + objects. + """ + + _transport_registry = ( + OrderedDict() + ) # type: Dict[str, Type[DataprocMetastoreFederationTransport]] + _transport_registry["grpc"] = DataprocMetastoreFederationGrpcTransport + _transport_registry[ + "grpc_asyncio" + ] = DataprocMetastoreFederationGrpcAsyncIOTransport + + def get_transport_class( + cls, + label: Optional[str] = None, + ) -> Type[DataprocMetastoreFederationTransport]: + """Returns an appropriate transport class. + + Args: + label: The name of the desired transport. If none is + provided, then the first transport in the registry is used. + + Returns: + The transport class to use. + """ + # If a specific transport is requested, return that one. + if label: + return cls._transport_registry[label] + + # No transport is requested; return the default (that is, the first one + # in the dictionary). + return next(iter(cls._transport_registry.values())) + + +class DataprocMetastoreFederationClient( + metaclass=DataprocMetastoreFederationClientMeta +): + """Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + """ + + @staticmethod + def _get_default_mtls_endpoint(api_endpoint): + """Converts api endpoint to mTLS endpoint. + + Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to + "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. + Args: + api_endpoint (Optional[str]): the api endpoint to convert. + Returns: + str: converted mTLS api endpoint. + """ + if not api_endpoint: + return api_endpoint + + mtls_endpoint_re = re.compile( + r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?" + ) + + m = mtls_endpoint_re.match(api_endpoint) + name, mtls, sandbox, googledomain = m.groups() + if mtls or not googledomain: + return api_endpoint + + if sandbox: + return api_endpoint.replace( + "sandbox.googleapis.com", "mtls.sandbox.googleapis.com" + ) + + return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") + + DEFAULT_ENDPOINT = "metastore.googleapis.com" + DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore + DEFAULT_ENDPOINT + ) + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_info(info) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + @classmethod + def from_service_account_file(cls, filename: str, *args, **kwargs): + """Creates an instance of this client using the provided credentials + file. + + Args: + filename (str): The path to the service account private key json + file. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_file(filename) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + from_service_account_json = from_service_account_file + + @property + def transport(self) -> DataprocMetastoreFederationTransport: + """Returns the transport used by the client instance. + + Returns: + DataprocMetastoreFederationTransport: The transport used by the client + instance. + """ + return self._transport + + @staticmethod + def federation_path( + project: str, + location: str, + federation: str, + ) -> str: + """Returns a fully-qualified federation string.""" + return ( + "projects/{project}/locations/{location}/federations/{federation}".format( + project=project, + location=location, + federation=federation, + ) + ) + + @staticmethod + def parse_federation_path(path: str) -> Dict[str, str]: + """Parses a federation path into its component segments.""" + m = re.match( + r"^projects/(?P.+?)/locations/(?P.+?)/federations/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def common_billing_account_path( + billing_account: str, + ) -> str: + """Returns a fully-qualified billing_account string.""" + return "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + + @staticmethod + def parse_common_billing_account_path(path: str) -> Dict[str, str]: + """Parse a billing_account path into its component segments.""" + m = re.match(r"^billingAccounts/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_folder_path( + folder: str, + ) -> str: + """Returns a fully-qualified folder string.""" + return "folders/{folder}".format( + folder=folder, + ) + + @staticmethod + def parse_common_folder_path(path: str) -> Dict[str, str]: + """Parse a folder path into its component segments.""" + m = re.match(r"^folders/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_organization_path( + organization: str, + ) -> str: + """Returns a fully-qualified organization string.""" + return "organizations/{organization}".format( + organization=organization, + ) + + @staticmethod + def parse_common_organization_path(path: str) -> Dict[str, str]: + """Parse a organization path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_project_path( + project: str, + ) -> str: + """Returns a fully-qualified project string.""" + return "projects/{project}".format( + project=project, + ) + + @staticmethod + def parse_common_project_path(path: str) -> Dict[str, str]: + """Parse a project path into its component segments.""" + m = re.match(r"^projects/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_location_path( + project: str, + location: str, + ) -> str: + """Returns a fully-qualified location string.""" + return "projects/{project}/locations/{location}".format( + project=project, + location=location, + ) + + @staticmethod + def parse_common_location_path(path: str) -> Dict[str, str]: + """Parse a location path into its component segments.""" + m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @classmethod + def get_mtls_endpoint_and_cert_source( + cls, client_options: Optional[client_options_lib.ClientOptions] = None + ): + """Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variabel is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + if client_options is None: + client_options = client_options_lib.ClientOptions() + use_client_cert = os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") + use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") + if use_client_cert not in ("true", "false"): + raise ValueError( + "Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`" + ) + if use_mtls_endpoint not in ("auto", "never", "always"): + raise MutualTLSChannelError( + "Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`" + ) + + # Figure out the client cert source to use. + client_cert_source = None + if use_client_cert == "true": + if client_options.client_cert_source: + client_cert_source = client_options.client_cert_source + elif mtls.has_default_client_cert_source(): + client_cert_source = mtls.default_client_cert_source() + + # Figure out which api endpoint to use. + if client_options.api_endpoint is not None: + api_endpoint = client_options.api_endpoint + elif use_mtls_endpoint == "always" or ( + use_mtls_endpoint == "auto" and client_cert_source + ): + api_endpoint = cls.DEFAULT_MTLS_ENDPOINT + else: + api_endpoint = cls.DEFAULT_ENDPOINT + + return api_endpoint, client_cert_source + + def __init__( + self, + *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Optional[Union[str, DataprocMetastoreFederationTransport]] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the dataproc metastore federation client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Union[str, DataprocMetastoreFederationTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): Custom options for the + client. It won't take effect if a ``transport`` instance is provided. + (1) The ``api_endpoint`` property can be used to override the + default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + """ + if isinstance(client_options, dict): + client_options = client_options_lib.from_dict(client_options) + if client_options is None: + client_options = client_options_lib.ClientOptions() + client_options = cast(client_options_lib.ClientOptions, client_options) + + api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source( + client_options + ) + + api_key_value = getattr(client_options, "api_key", None) + if api_key_value and credentials: + raise ValueError( + "client_options.api_key and credentials are mutually exclusive" + ) + + # Save or instantiate the transport. + # Ordinarily, we provide the transport, but allowing a custom transport + # instance provides an extensibility point for unusual situations. + if isinstance(transport, DataprocMetastoreFederationTransport): + # transport is a DataprocMetastoreFederationTransport instance. + if credentials or client_options.credentials_file or api_key_value: + raise ValueError( + "When providing a transport instance, " + "provide its credentials directly." + ) + if client_options.scopes: + raise ValueError( + "When providing a transport instance, provide its scopes " + "directly." + ) + self._transport = transport + else: + import google.auth._default # type: ignore + + if api_key_value and hasattr( + google.auth._default, "get_api_key_credentials" + ): + credentials = google.auth._default.get_api_key_credentials( + api_key_value + ) + + Transport = type(self).get_transport_class(transport) + self._transport = Transport( + credentials=credentials, + credentials_file=client_options.credentials_file, + host=api_endpoint, + scopes=client_options.scopes, + client_cert_source_for_mtls=client_cert_source_func, + quota_project_id=client_options.quota_project_id, + client_info=client_info, + always_use_jwt_access=True, + api_audience=client_options.api_audience, + ) + + def list_federations( + self, + request: Optional[ + Union[metastore_federation.ListFederationsRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListFederationsPager: + r"""Lists federations in a project and location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1beta + + def sample_list_federations(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1beta.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.metastore_v1beta.types.ListFederationsRequest, dict]): + The request object. Request message for ListFederations. + parent (str): + Required. The relative resource name of the location of + metastore federations to list, in the following form: + ``projects/{project_number}/locations/{location_id}``. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1beta.services.dataproc_metastore_federation.pagers.ListFederationsPager: + Response message for ListFederations + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.ListFederationsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.ListFederationsRequest): + request = metastore_federation.ListFederationsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_federations] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListFederationsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_federation( + self, + request: Optional[ + Union[metastore_federation.GetFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> metastore_federation.Federation: + r"""Gets the details of a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1beta + + def sample_get_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1beta.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = client.get_federation(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1beta.types.GetFederationRequest, dict]): + The request object. Request message for GetFederation. + name (str): + Required. The relative resource name of the metastore + federation to retrieve, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1beta.types.Federation: + Represents a federation of multiple + backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.GetFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.GetFederationRequest): + request = metastore_federation.GetFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def create_federation( + self, + request: Optional[ + Union[metastore_federation.CreateFederationRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + federation: Optional[metastore_federation.Federation] = None, + federation_id: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Creates a metastore federation in a project and + location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1beta + + def sample_create_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1beta.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1beta.types.CreateFederationRequest, dict]): + The request object. Request message for + CreateFederation. + parent (str): + Required. The relative resource name of the location in + which to create a federation service, in the following + form: + + ``projects/{project_number}/locations/{location_id}``. + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation (google.cloud.metastore_v1beta.types.Federation): + Required. The Metastore Federation to create. The + ``name`` field is ignored. The ID of the created + metastore federation must be provided in the request's + ``federation_id`` field. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation_id (str): + Required. The ID of the metastore + federation, which is used as the final + component of the metastore federation's + name. + This value must be between 2 and 63 + characters long inclusive, begin with a + letter, end with a letter or number, and + consist of alpha-numeric ASCII + characters or hyphens. + + This corresponds to the ``federation_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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1beta.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, federation, federation_id]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.CreateFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.CreateFederationRequest): + request = metastore_federation.CreateFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if federation is not None: + request.federation = federation + if federation_id is not None: + request.federation_id = federation_id + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.create_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + def update_federation( + self, + request: Optional[ + Union[metastore_federation.UpdateFederationRequest, dict] + ] = None, + *, + federation: Optional[metastore_federation.Federation] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Updates the fields of a federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1beta + + def sample_update_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1beta.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1beta.types.UpdateFederationRequest, dict]): + The request object. Request message for + UpdateFederation. + federation (google.cloud.metastore_v1beta.types.Federation): + Required. The metastore federation to update. The server + only merges fields in the service if they are specified + in ``update_mask``. + + The metastore federation's ``name`` field is used to + identify the metastore service to be updated. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + Required. A field mask used to specify the fields to be + overwritten in the metastore federation resource by the + update. Fields specified in the ``update_mask`` are + relative to the resource (not to the full request). A + field is overwritten if it is in the mask. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1beta.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([federation, update_mask]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.UpdateFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.UpdateFederationRequest): + request = metastore_federation.UpdateFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if federation is not None: + request.federation = federation + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("federation.name", request.federation.name),) + ), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + def delete_federation( + self, + request: Optional[ + Union[metastore_federation.DeleteFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Deletes a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1beta + + def sample_delete_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1beta.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1beta.types.DeleteFederationRequest, dict]): + The request object. Request message for + DeleteFederation. + name (str): + Required. The relative resource name of the metastore + federation to delete, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + 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, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be :class:`google.protobuf.empty_pb2.Empty` A generic empty message that you can re-use to avoid defining duplicated + empty messages in your APIs. A typical example is to + use it as the request or the response type of an API + method. For instance: + + service Foo { + rpc Bar(google.protobuf.Empty) returns + (google.protobuf.Empty); + + } + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.DeleteFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.DeleteFederationRequest): + request = metastore_federation.DeleteFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + empty_pb2.Empty, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + """Releases underlying transport's resources. + + .. warning:: + ONLY use as a context manager if the transport is NOT shared + with other clients! Exiting the with block will CLOSE the transport + and may cause errors in other clients! + """ + self.transport.close() + + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) + + +__all__ = ("DataprocMetastoreFederationClient",) diff --git a/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/pagers.py b/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/pagers.py new file mode 100644 index 0000000..56f9835 --- /dev/null +++ b/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/pagers.py @@ -0,0 +1,157 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from typing import ( + Any, + AsyncIterator, + Awaitable, + Callable, + Iterator, + Optional, + Sequence, + Tuple, +) + +from google.cloud.metastore_v1beta.types import metastore_federation + + +class ListFederationsPager: + """A pager for iterating through ``list_federations`` requests. + + This class thinly wraps an initial + :class:`google.cloud.metastore_v1beta.types.ListFederationsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``federations`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListFederations`` requests and continue to iterate + through the ``federations`` field on the + corresponding responses. + + All the usual :class:`google.cloud.metastore_v1beta.types.ListFederationsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[..., metastore_federation.ListFederationsResponse], + request: metastore_federation.ListFederationsRequest, + response: metastore_federation.ListFederationsResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.metastore_v1beta.types.ListFederationsRequest): + The initial request object. + response (google.cloud.metastore_v1beta.types.ListFederationsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = metastore_federation.ListFederationsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[metastore_federation.ListFederationsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[metastore_federation.Federation]: + for page in self.pages: + yield from page.federations + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + +class ListFederationsAsyncPager: + """A pager for iterating through ``list_federations`` requests. + + This class thinly wraps an initial + :class:`google.cloud.metastore_v1beta.types.ListFederationsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``federations`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListFederations`` requests and continue to iterate + through the ``federations`` field on the + corresponding responses. + + All the usual :class:`google.cloud.metastore_v1beta.types.ListFederationsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[..., Awaitable[metastore_federation.ListFederationsResponse]], + request: metastore_federation.ListFederationsRequest, + response: metastore_federation.ListFederationsResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.metastore_v1beta.types.ListFederationsRequest): + The initial request object. + response (google.cloud.metastore_v1beta.types.ListFederationsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = metastore_federation.ListFederationsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages( + self, + ) -> AsyncIterator[metastore_federation.ListFederationsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + + def __aiter__(self) -> AsyncIterator[metastore_federation.Federation]: + async def async_generator(): + async for page in self.pages: + for response in page.federations: + yield response + + return async_generator() + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) diff --git a/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/__init__.py b/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/__init__.py new file mode 100644 index 0000000..7c7e978 --- /dev/null +++ b/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/__init__.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from collections import OrderedDict +from typing import Dict, Type + +from .base import DataprocMetastoreFederationTransport +from .grpc import DataprocMetastoreFederationGrpcTransport +from .grpc_asyncio import DataprocMetastoreFederationGrpcAsyncIOTransport + +# Compile a registry of transports. +_transport_registry = ( + OrderedDict() +) # type: Dict[str, Type[DataprocMetastoreFederationTransport]] +_transport_registry["grpc"] = DataprocMetastoreFederationGrpcTransport +_transport_registry["grpc_asyncio"] = DataprocMetastoreFederationGrpcAsyncIOTransport + +__all__ = ( + "DataprocMetastoreFederationTransport", + "DataprocMetastoreFederationGrpcTransport", + "DataprocMetastoreFederationGrpcAsyncIOTransport", +) diff --git a/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/base.py b/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/base.py new file mode 100644 index 0000000..4a921c5 --- /dev/null +++ b/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/base.py @@ -0,0 +1,222 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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 abc +from typing import Awaitable, Callable, Dict, Optional, Sequence, Union + +import google.api_core +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1, operations_v1 +from google.api_core import retry as retries +import google.auth # type: ignore +from google.auth import credentials as ga_credentials # type: ignore +from google.longrunning import operations_pb2 # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.cloud.metastore_v1beta import gapic_version as package_version +from google.cloud.metastore_v1beta.types import metastore_federation + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) + + +class DataprocMetastoreFederationTransport(abc.ABC): + """Abstract transport class for DataprocMetastoreFederation.""" + + AUTH_SCOPES = ("https://www.googleapis.com/auth/cloud-platform",) + + DEFAULT_HOST: str = "metastore.googleapis.com" + + def __init__( + self, + *, + host: str = DEFAULT_HOST, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + **kwargs, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A list of scopes. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + """ + + scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} + + # Save the scopes. + self._scopes = scopes + + # If no credentials are provided, then determine the appropriate + # defaults. + if credentials and credentials_file: + raise core_exceptions.DuplicateCredentialArgs( + "'credentials_file' and 'credentials' are mutually exclusive" + ) + + if credentials_file is not None: + credentials, _ = google.auth.load_credentials_from_file( + credentials_file, **scopes_kwargs, quota_project_id=quota_project_id + ) + elif credentials is None: + credentials, _ = google.auth.default( + **scopes_kwargs, quota_project_id=quota_project_id + ) + # Don't apply audience if the credentials file passed from user. + if hasattr(credentials, "with_gdch_audience"): + credentials = credentials.with_gdch_audience( + api_audience if api_audience else host + ) + + # If the credentials are service account credentials, then always try to use self signed JWT. + if ( + always_use_jwt_access + and isinstance(credentials, service_account.Credentials) + and hasattr(service_account.Credentials, "with_always_use_jwt_access") + ): + credentials = credentials.with_always_use_jwt_access(True) + + # Save the credentials. + self._credentials = credentials + + # Save the hostname. Default to port 443 (HTTPS) if none is specified. + if ":" not in host: + host += ":443" + self._host = host + + def _prep_wrapped_messages(self, client_info): + # Precompute the wrapped methods. + self._wrapped_methods = { + self.list_federations: gapic_v1.method.wrap_method( + self.list_federations, + default_timeout=None, + client_info=client_info, + ), + self.get_federation: gapic_v1.method.wrap_method( + self.get_federation, + default_timeout=None, + client_info=client_info, + ), + self.create_federation: gapic_v1.method.wrap_method( + self.create_federation, + default_timeout=None, + client_info=client_info, + ), + self.update_federation: gapic_v1.method.wrap_method( + self.update_federation, + default_timeout=None, + client_info=client_info, + ), + self.delete_federation: gapic_v1.method.wrap_method( + self.delete_federation, + default_timeout=None, + client_info=client_info, + ), + } + + def close(self): + """Closes resources associated with the transport. + + .. warning:: + Only call this method if the transport is NOT shared + with other clients - this may cause errors in other clients! + """ + raise NotImplementedError() + + @property + def operations_client(self): + """Return the client designed to process long-running operations.""" + raise NotImplementedError() + + @property + def list_federations( + self, + ) -> Callable[ + [metastore_federation.ListFederationsRequest], + Union[ + metastore_federation.ListFederationsResponse, + Awaitable[metastore_federation.ListFederationsResponse], + ], + ]: + raise NotImplementedError() + + @property + def get_federation( + self, + ) -> Callable[ + [metastore_federation.GetFederationRequest], + Union[ + metastore_federation.Federation, Awaitable[metastore_federation.Federation] + ], + ]: + raise NotImplementedError() + + @property + def create_federation( + self, + ) -> Callable[ + [metastore_federation.CreateFederationRequest], + Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], + ]: + raise NotImplementedError() + + @property + def update_federation( + self, + ) -> Callable[ + [metastore_federation.UpdateFederationRequest], + Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], + ]: + raise NotImplementedError() + + @property + def delete_federation( + self, + ) -> Callable[ + [metastore_federation.DeleteFederationRequest], + Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], + ]: + raise NotImplementedError() + + @property + def kind(self) -> str: + raise NotImplementedError() + + +__all__ = ("DataprocMetastoreFederationTransport",) diff --git a/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/grpc.py b/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/grpc.py new file mode 100644 index 0000000..3516286 --- /dev/null +++ b/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/grpc.py @@ -0,0 +1,411 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from typing import Callable, Dict, Optional, Sequence, Tuple, Union +import warnings + +from google.api_core import gapic_v1, grpc_helpers, operations_v1 +import google.auth # type: ignore +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.longrunning import operations_pb2 # type: ignore +import grpc # type: ignore + +from google.cloud.metastore_v1beta.types import metastore_federation + +from .base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport + + +class DataprocMetastoreFederationGrpcTransport(DataprocMetastoreFederationTransport): + """gRPC backend transport for DataprocMetastoreFederation. + + Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + + _stubs: Dict[str, Callable] + + def __init__( + self, + *, + host: str = "metastore.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: Optional[grpc.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + channel (Optional[grpc.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or application default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for the grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure a mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + self._grpc_channel = None + self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} + self._operations_client: Optional[operations_v1.OperationsClient] = None + + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + + if channel: + # Ignore credentials if a channel was passed. + credentials = False + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + self._ssl_channel_credentials = None + + else: + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials + + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + if not self._grpc_channel: + self._grpc_channel = type(self).create_channel( + self._host, + # use the credentials which are saved + credentials=self._credentials, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, + scopes=self._scopes, + ssl_credentials=self._ssl_channel_credentials, + quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) + + @classmethod + def create_channel( + cls, + host: str = "metastore.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs, + ) -> grpc.Channel: + """Create and return a gRPC channel object. + Args: + host (Optional[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + grpc.Channel: A gRPC channel object. + + Raises: + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + + return grpc_helpers.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + quota_project_id=quota_project_id, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, + **kwargs, + ) + + @property + def grpc_channel(self) -> grpc.Channel: + """Return the channel designed to connect to this service.""" + return self._grpc_channel + + @property + def operations_client(self) -> operations_v1.OperationsClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Quick check: Only create a new client if we do not already have one. + if self._operations_client is None: + self._operations_client = operations_v1.OperationsClient(self.grpc_channel) + + # Return the client from cache. + return self._operations_client + + @property + def list_federations( + self, + ) -> Callable[ + [metastore_federation.ListFederationsRequest], + metastore_federation.ListFederationsResponse, + ]: + r"""Return a callable for the list federations method over gRPC. + + Lists federations in a project and location. + + Returns: + Callable[[~.ListFederationsRequest], + ~.ListFederationsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_federations" not in self._stubs: + self._stubs["list_federations"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1beta.DataprocMetastoreFederation/ListFederations", + request_serializer=metastore_federation.ListFederationsRequest.serialize, + response_deserializer=metastore_federation.ListFederationsResponse.deserialize, + ) + return self._stubs["list_federations"] + + @property + def get_federation( + self, + ) -> Callable[ + [metastore_federation.GetFederationRequest], metastore_federation.Federation + ]: + r"""Return a callable for the get federation method over gRPC. + + Gets the details of a single federation. + + Returns: + Callable[[~.GetFederationRequest], + ~.Federation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_federation" not in self._stubs: + self._stubs["get_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1beta.DataprocMetastoreFederation/GetFederation", + request_serializer=metastore_federation.GetFederationRequest.serialize, + response_deserializer=metastore_federation.Federation.deserialize, + ) + return self._stubs["get_federation"] + + @property + def create_federation( + self, + ) -> Callable[ + [metastore_federation.CreateFederationRequest], operations_pb2.Operation + ]: + r"""Return a callable for the create federation method over gRPC. + + Creates a metastore federation in a project and + location. + + Returns: + Callable[[~.CreateFederationRequest], + ~.Operation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "create_federation" not in self._stubs: + self._stubs["create_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1beta.DataprocMetastoreFederation/CreateFederation", + request_serializer=metastore_federation.CreateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["create_federation"] + + @property + def update_federation( + self, + ) -> Callable[ + [metastore_federation.UpdateFederationRequest], operations_pb2.Operation + ]: + r"""Return a callable for the update federation method over gRPC. + + Updates the fields of a federation. + + Returns: + Callable[[~.UpdateFederationRequest], + ~.Operation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "update_federation" not in self._stubs: + self._stubs["update_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1beta.DataprocMetastoreFederation/UpdateFederation", + request_serializer=metastore_federation.UpdateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["update_federation"] + + @property + def delete_federation( + self, + ) -> Callable[ + [metastore_federation.DeleteFederationRequest], operations_pb2.Operation + ]: + r"""Return a callable for the delete federation method over gRPC. + + Deletes a single federation. + + Returns: + Callable[[~.DeleteFederationRequest], + ~.Operation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "delete_federation" not in self._stubs: + self._stubs["delete_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1beta.DataprocMetastoreFederation/DeleteFederation", + request_serializer=metastore_federation.DeleteFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["delete_federation"] + + def close(self): + self.grpc_channel.close() + + @property + def kind(self) -> str: + return "grpc" + + +__all__ = ("DataprocMetastoreFederationGrpcTransport",) diff --git a/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/grpc_asyncio.py b/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/grpc_asyncio.py new file mode 100644 index 0000000..cf942e4 --- /dev/null +++ b/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/grpc_asyncio.py @@ -0,0 +1,418 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union +import warnings + +from google.api_core import gapic_v1, grpc_helpers_async, operations_v1 +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.longrunning import operations_pb2 # type: ignore +import grpc # type: ignore +from grpc.experimental import aio # type: ignore + +from google.cloud.metastore_v1beta.types import metastore_federation + +from .base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport +from .grpc import DataprocMetastoreFederationGrpcTransport + + +class DataprocMetastoreFederationGrpcAsyncIOTransport( + DataprocMetastoreFederationTransport +): + """gRPC AsyncIO backend transport for DataprocMetastoreFederation. + + Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + + _grpc_channel: aio.Channel + _stubs: Dict[str, Callable] = {} + + @classmethod + def create_channel( + cls, + host: str = "metastore.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs, + ) -> aio.Channel: + """Create and return a gRPC AsyncIO channel object. + Args: + host (Optional[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + aio.Channel: A gRPC AsyncIO channel object. + """ + + return grpc_helpers_async.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + quota_project_id=quota_project_id, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, + **kwargs, + ) + + def __init__( + self, + *, + host: str = "metastore.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: Optional[aio.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + channel (Optional[aio.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or application default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for the grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure a mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + + Raises: + google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + creation failed for any reason. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + self._grpc_channel = None + self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} + self._operations_client: Optional[operations_v1.OperationsAsyncClient] = None + + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + + if channel: + # Ignore credentials if a channel was passed. + credentials = False + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + self._ssl_channel_credentials = None + else: + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials + + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + if not self._grpc_channel: + self._grpc_channel = type(self).create_channel( + self._host, + # use the credentials which are saved + credentials=self._credentials, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, + scopes=self._scopes, + ssl_credentials=self._ssl_channel_credentials, + quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) + + @property + def grpc_channel(self) -> aio.Channel: + """Create the channel designed to connect to this service. + + This property caches on the instance; repeated calls return + the same channel. + """ + # Return the channel from cache. + return self._grpc_channel + + @property + def operations_client(self) -> operations_v1.OperationsAsyncClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Quick check: Only create a new client if we do not already have one. + if self._operations_client is None: + self._operations_client = operations_v1.OperationsAsyncClient( + self.grpc_channel + ) + + # Return the client from cache. + return self._operations_client + + @property + def list_federations( + self, + ) -> Callable[ + [metastore_federation.ListFederationsRequest], + Awaitable[metastore_federation.ListFederationsResponse], + ]: + r"""Return a callable for the list federations method over gRPC. + + Lists federations in a project and location. + + Returns: + Callable[[~.ListFederationsRequest], + Awaitable[~.ListFederationsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_federations" not in self._stubs: + self._stubs["list_federations"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1beta.DataprocMetastoreFederation/ListFederations", + request_serializer=metastore_federation.ListFederationsRequest.serialize, + response_deserializer=metastore_federation.ListFederationsResponse.deserialize, + ) + return self._stubs["list_federations"] + + @property + def get_federation( + self, + ) -> Callable[ + [metastore_federation.GetFederationRequest], + Awaitable[metastore_federation.Federation], + ]: + r"""Return a callable for the get federation method over gRPC. + + Gets the details of a single federation. + + Returns: + Callable[[~.GetFederationRequest], + Awaitable[~.Federation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_federation" not in self._stubs: + self._stubs["get_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1beta.DataprocMetastoreFederation/GetFederation", + request_serializer=metastore_federation.GetFederationRequest.serialize, + response_deserializer=metastore_federation.Federation.deserialize, + ) + return self._stubs["get_federation"] + + @property + def create_federation( + self, + ) -> Callable[ + [metastore_federation.CreateFederationRequest], + Awaitable[operations_pb2.Operation], + ]: + r"""Return a callable for the create federation method over gRPC. + + Creates a metastore federation in a project and + location. + + Returns: + Callable[[~.CreateFederationRequest], + Awaitable[~.Operation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "create_federation" not in self._stubs: + self._stubs["create_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1beta.DataprocMetastoreFederation/CreateFederation", + request_serializer=metastore_federation.CreateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["create_federation"] + + @property + def update_federation( + self, + ) -> Callable[ + [metastore_federation.UpdateFederationRequest], + Awaitable[operations_pb2.Operation], + ]: + r"""Return a callable for the update federation method over gRPC. + + Updates the fields of a federation. + + Returns: + Callable[[~.UpdateFederationRequest], + Awaitable[~.Operation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "update_federation" not in self._stubs: + self._stubs["update_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1beta.DataprocMetastoreFederation/UpdateFederation", + request_serializer=metastore_federation.UpdateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["update_federation"] + + @property + def delete_federation( + self, + ) -> Callable[ + [metastore_federation.DeleteFederationRequest], + Awaitable[operations_pb2.Operation], + ]: + r"""Return a callable for the delete federation method over gRPC. + + Deletes a single federation. + + Returns: + Callable[[~.DeleteFederationRequest], + Awaitable[~.Operation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "delete_federation" not in self._stubs: + self._stubs["delete_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1beta.DataprocMetastoreFederation/DeleteFederation", + request_serializer=metastore_federation.DeleteFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["delete_federation"] + + def close(self): + return self.grpc_channel.close() + + +__all__ = ("DataprocMetastoreFederationGrpcAsyncIOTransport",) diff --git a/google/cloud/metastore_v1beta/types/__init__.py b/google/cloud/metastore_v1beta/types/__init__.py index 7393486..f98016d 100644 --- a/google/cloud/metastore_v1beta/types/__init__.py +++ b/google/cloud/metastore_v1beta/types/__init__.py @@ -14,20 +14,24 @@ # limitations under the License. # from .metastore import ( + AuxiliaryVersionConfig, Backup, CreateBackupRequest, CreateMetadataImportRequest, CreateServiceRequest, DatabaseDumpSpec, DataCatalogConfig, + DataplexConfig, DeleteBackupRequest, DeleteServiceRequest, + EncryptionConfig, ExportMetadataRequest, GetBackupRequest, GetMetadataImportRequest, GetServiceRequest, HiveMetastoreConfig, KerberosConfig, + Lake, ListBackupsRequest, ListBackupsResponse, ListMetadataImportsRequest, @@ -40,30 +44,46 @@ MetadataImport, MetadataIntegration, MetadataManagementActivity, + NetworkConfig, OperationMetadata, Restore, RestoreServiceRequest, Secret, Service, + TelemetryConfig, UpdateMetadataImportRequest, UpdateServiceRequest, ) +from .metastore_federation import ( + BackendMetastore, + CreateFederationRequest, + DeleteFederationRequest, + Federation, + GetFederationRequest, + ListFederationsRequest, + ListFederationsResponse, + UpdateFederationRequest, +) __all__ = ( + "AuxiliaryVersionConfig", "Backup", "CreateBackupRequest", "CreateMetadataImportRequest", "CreateServiceRequest", "DatabaseDumpSpec", "DataCatalogConfig", + "DataplexConfig", "DeleteBackupRequest", "DeleteServiceRequest", + "EncryptionConfig", "ExportMetadataRequest", "GetBackupRequest", "GetMetadataImportRequest", "GetServiceRequest", "HiveMetastoreConfig", "KerberosConfig", + "Lake", "ListBackupsRequest", "ListBackupsResponse", "ListMetadataImportsRequest", @@ -76,11 +96,21 @@ "MetadataImport", "MetadataIntegration", "MetadataManagementActivity", + "NetworkConfig", "OperationMetadata", "Restore", "RestoreServiceRequest", "Secret", "Service", + "TelemetryConfig", "UpdateMetadataImportRequest", "UpdateServiceRequest", + "BackendMetastore", + "CreateFederationRequest", + "DeleteFederationRequest", + "Federation", + "GetFederationRequest", + "ListFederationsRequest", + "ListFederationsResponse", + "UpdateFederationRequest", ) diff --git a/google/cloud/metastore_v1beta/types/metastore.py b/google/cloud/metastore_v1beta/types/metastore.py index 9419e31..e7ae3a6 100644 --- a/google/cloud/metastore_v1beta/types/metastore.py +++ b/google/cloud/metastore_v1beta/types/metastore.py @@ -13,6 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from typing import MutableMapping, MutableSequence + from google.protobuf import field_mask_pb2 # type: ignore from google.protobuf import timestamp_pb2 # type: ignore from google.protobuf import wrappers_pb2 # type: ignore @@ -25,10 +27,16 @@ "Service", "MetadataIntegration", "DataCatalogConfig", + "DataplexConfig", + "Lake", "MaintenanceWindow", "HiveMetastoreConfig", "KerberosConfig", "Secret", + "EncryptionConfig", + "AuxiliaryVersionConfig", + "NetworkConfig", + "TelemetryConfig", "MetadataManagementActivity", "MetadataImport", "MetadataExport", @@ -73,7 +81,7 @@ class Service(proto.Message): This field is a member of `oneof`_ ``metastore_config``. name (str): Immutable. The relative resource name of the metastore - service, of the form: + service, in the following format: ``projects/{project_number}/locations/{location_id}/services/{service_id}``. create_time (google.protobuf.timestamp_pb2.Timestamp): @@ -82,7 +90,7 @@ class Service(proto.Message): update_time (google.protobuf.timestamp_pb2.Timestamp): Output only. The time when the metastore service was last updated. - labels (Mapping[str, str]): + labels (MutableMapping[str, str]): User-defined labels for the metastore service. network (str): @@ -118,7 +126,9 @@ class Service(proto.Message): The one hour maintenance window of the metastore service. This specifies when the service can be restarted for maintenance - purposes in UTC time. + purposes in UTC time. Maintenance window is not + needed for services with the SPANNER database + type. uid (str): Output only. The globally unique resource identifier of the metastore service. @@ -128,6 +138,20 @@ class Service(proto.Message): release_channel (google.cloud.metastore_v1beta.types.Service.ReleaseChannel): Immutable. The release channel of the service. If unspecified, defaults to ``STABLE``. + encryption_config (google.cloud.metastore_v1beta.types.EncryptionConfig): + Immutable. Information used to configure the + Dataproc Metastore service to encrypt customer + data at rest. Cannot be updated. + network_config (google.cloud.metastore_v1beta.types.NetworkConfig): + The configuration specifying the network + settings for the Dataproc Metastore service. + database_type (google.cloud.metastore_v1beta.types.Service.DatabaseType): + Immutable. The database type that the + Metastore service stores its data. + telemetry_config (google.cloud.metastore_v1beta.types.TelemetryConfig): + The configuration specifying telemetry settings for the + Dataproc Metastore service. If unspecified defaults to + ``JSON``. """ class State(proto.Enum): @@ -157,85 +181,111 @@ class ReleaseChannel(proto.Enum): CANARY = 1 STABLE = 2 - hive_metastore_config = proto.Field( + class DatabaseType(proto.Enum): + r"""The backend database type for the metastore service.""" + DATABASE_TYPE_UNSPECIFIED = 0 + MYSQL = 1 + SPANNER = 2 + + hive_metastore_config: "HiveMetastoreConfig" = proto.Field( proto.MESSAGE, number=5, oneof="metastore_config", message="HiveMetastoreConfig", ) - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - update_time = proto.Field( + update_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=3, message=timestamp_pb2.Timestamp, ) - labels = proto.MapField( + labels: MutableMapping[str, str] = proto.MapField( proto.STRING, proto.STRING, number=4, ) - network = proto.Field( + network: str = proto.Field( proto.STRING, number=7, ) - endpoint_uri = proto.Field( + endpoint_uri: str = proto.Field( proto.STRING, number=8, ) - port = proto.Field( + port: int = proto.Field( proto.INT32, number=9, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=10, enum=State, ) - state_message = proto.Field( + state_message: str = proto.Field( proto.STRING, number=11, ) - artifact_gcs_uri = proto.Field( + artifact_gcs_uri: str = proto.Field( proto.STRING, number=12, ) - tier = proto.Field( + tier: Tier = proto.Field( proto.ENUM, number=13, enum=Tier, ) - metadata_integration = proto.Field( + metadata_integration: "MetadataIntegration" = proto.Field( proto.MESSAGE, number=14, message="MetadataIntegration", ) - maintenance_window = proto.Field( + maintenance_window: "MaintenanceWindow" = proto.Field( proto.MESSAGE, number=15, message="MaintenanceWindow", ) - uid = proto.Field( + uid: str = proto.Field( proto.STRING, number=16, ) - metadata_management_activity = proto.Field( + metadata_management_activity: "MetadataManagementActivity" = proto.Field( proto.MESSAGE, number=17, message="MetadataManagementActivity", ) - release_channel = proto.Field( + release_channel: ReleaseChannel = proto.Field( proto.ENUM, number=19, enum=ReleaseChannel, ) + encryption_config: "EncryptionConfig" = proto.Field( + proto.MESSAGE, + number=20, + message="EncryptionConfig", + ) + network_config: "NetworkConfig" = proto.Field( + proto.MESSAGE, + number=21, + message="NetworkConfig", + ) + database_type: DatabaseType = proto.Field( + proto.ENUM, + number=22, + enum=DatabaseType, + ) + telemetry_config: "TelemetryConfig" = proto.Field( + proto.MESSAGE, + number=23, + message="TelemetryConfig", + ) class MetadataIntegration(proto.Message): @@ -246,13 +296,21 @@ class MetadataIntegration(proto.Message): data_catalog_config (google.cloud.metastore_v1beta.types.DataCatalogConfig): The integration config for the Data Catalog service. + dataplex_config (google.cloud.metastore_v1beta.types.DataplexConfig): + The integration config for the Dataplex + service. """ - data_catalog_config = proto.Field( + data_catalog_config: "DataCatalogConfig" = proto.Field( proto.MESSAGE, number=1, message="DataCatalogConfig", ) + dataplex_config: "DataplexConfig" = proto.Field( + proto.MESSAGE, + number=2, + message="DataplexConfig", + ) class DataCatalogConfig(proto.Message): @@ -267,12 +325,47 @@ class DataCatalogConfig(proto.Message): Catalog. """ - enabled = proto.Field( + enabled: bool = proto.Field( proto.BOOL, number=2, ) +class DataplexConfig(proto.Message): + r"""Specifies how metastore metadata should be integrated with + the Dataplex service. + + Attributes: + lake_resources (MutableMapping[str, google.cloud.metastore_v1beta.types.Lake]): + A reference to the Lake resources that this metastore + service is attached to. The key is the lake resource name. + Example: + ``projects/{project_number}/locations/{location_id}/lakes/{lake_id}``. + """ + + lake_resources: MutableMapping[str, "Lake"] = proto.MapField( + proto.STRING, + proto.MESSAGE, + number=1, + message="Lake", + ) + + +class Lake(proto.Message): + r"""Represents a Lake resource + + Attributes: + name (str): + The Lake resource name. Example: + ``projects/{project_number}/locations/{location_id}/lakes/{lake_id}`` + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + class MaintenanceWindow(proto.Message): r"""Maintenance window. This specifies when Dataproc Metastore may perform system maintenance operation to the service. @@ -285,12 +378,12 @@ class MaintenanceWindow(proto.Message): The day of week, when the window starts. """ - hour_of_day = proto.Field( + hour_of_day: wrappers_pb2.Int32Value = proto.Field( proto.MESSAGE, number=1, message=wrappers_pb2.Int32Value, ) - day_of_week = proto.Field( + day_of_week: dayofweek_pb2.DayOfWeek = proto.Field( proto.ENUM, number=2, enum=dayofweek_pb2.DayOfWeek, @@ -304,11 +397,13 @@ class HiveMetastoreConfig(proto.Message): Attributes: version (str): Immutable. The Hive metastore schema version. - config_overrides (Mapping[str, str]): + config_overrides (MutableMapping[str, str]): A mapping of Hive metastore configuration key-value pairs to apply to the Hive metastore (configured in ``hive-site.xml``). The mappings override system defaults - (some keys cannot be overridden). + (some keys cannot be overridden). These overrides are also + applied to auxiliary versions and can be further customized + in the auxiliary version's ``AuxiliaryVersionConfig``. kerberos_config (google.cloud.metastore_v1beta.types.KerberosConfig): Information used to configure the Hive metastore service as a service principal in a Kerberos realm. To disable @@ -316,22 +411,55 @@ class HiveMetastoreConfig(proto.Message): field's path (``hive_metastore_config.kerberos_config``) in the request's ``update_mask`` while omitting this field from the request's ``service``. + endpoint_protocol (google.cloud.metastore_v1beta.types.HiveMetastoreConfig.EndpointProtocol): + The protocol to use for the metastore service endpoint. If + unspecified, defaults to ``THRIFT``. + auxiliary_versions (MutableMapping[str, google.cloud.metastore_v1beta.types.AuxiliaryVersionConfig]): + A mapping of Hive metastore version to the auxiliary version + configuration. When specified, a secondary Hive metastore + service is created along with the primary service. All + auxiliary versions must be less than the service's primary + version. The key is the auxiliary service name and it must + match the regular expression `a-z <[-a-z0-9]*[a-z0-9]>`__?. + This means that the first character must be a lowercase + letter, and all the following characters must be hyphens, + lowercase letters, or digits, except the last character, + which cannot be a hyphen. """ - version = proto.Field( + class EndpointProtocol(proto.Enum): + r"""Protocols available for serving the metastore service + endpoint. + """ + ENDPOINT_PROTOCOL_UNSPECIFIED = 0 + THRIFT = 1 + GRPC = 2 + + version: str = proto.Field( proto.STRING, number=1, ) - config_overrides = proto.MapField( + config_overrides: MutableMapping[str, str] = proto.MapField( proto.STRING, proto.STRING, number=2, ) - kerberos_config = proto.Field( + kerberos_config: "KerberosConfig" = proto.Field( proto.MESSAGE, number=3, message="KerberosConfig", ) + endpoint_protocol: EndpointProtocol = proto.Field( + proto.ENUM, + number=4, + enum=EndpointProtocol, + ) + auxiliary_versions: MutableMapping[str, "AuxiliaryVersionConfig"] = proto.MapField( + proto.STRING, + proto.MESSAGE, + number=5, + message="AuxiliaryVersionConfig", + ) class KerberosConfig(proto.Message): @@ -349,20 +477,20 @@ class KerberosConfig(proto.Message): krb5_config_gcs_uri (str): A Cloud Storage URI that specifies the path to a krb5.conf file. It is of the form - gs://{bucket_name}/path/to/krb5.conf, although the file does - not need to be named krb5.conf explicitly. + ``gs://{bucket_name}/path/to/krb5.conf``, although the file + does not need to be named krb5.conf explicitly. """ - keytab = proto.Field( + keytab: "Secret" = proto.Field( proto.MESSAGE, number=1, message="Secret", ) - principal = proto.Field( + principal: str = proto.Field( proto.STRING, number=2, ) - krb5_config_gcs_uri = proto.Field( + krb5_config_gcs_uri: str = proto.Field( proto.STRING, number=3, ) @@ -383,31 +511,160 @@ class Secret(proto.Message): This field is a member of `oneof`_ ``value``. """ - cloud_secret = proto.Field( + cloud_secret: str = proto.Field( proto.STRING, number=2, oneof="value", ) +class EncryptionConfig(proto.Message): + r"""Encryption settings for the service. + + Attributes: + kms_key (str): + The fully qualified customer provided Cloud KMS key name to + use for customer data encryption, in the following form: + + ``projects/{project_number}/locations/{location_id}/keyRings/{key_ring_id}/cryptoKeys/{crypto_key_id}``. + """ + + kms_key: str = proto.Field( + proto.STRING, + number=1, + ) + + +class AuxiliaryVersionConfig(proto.Message): + r"""Configuration information for the auxiliary service versions. + + Attributes: + version (str): + The Hive metastore version of the auxiliary + service. It must be less than the primary Hive + metastore service's version. + config_overrides (MutableMapping[str, str]): + A mapping of Hive metastore configuration key-value pairs to + apply to the auxiliary Hive metastore (configured in + ``hive-site.xml``) in addition to the primary version's + overrides. If keys are present in both the auxiliary + version's overrides and the primary version's overrides, the + value from the auxiliary version's overrides takes + precedence. + network_config (google.cloud.metastore_v1beta.types.NetworkConfig): + Output only. The network configuration + contains the endpoint URI(s) of the auxiliary + Hive metastore service. + """ + + version: str = proto.Field( + proto.STRING, + number=1, + ) + config_overrides: MutableMapping[str, str] = proto.MapField( + proto.STRING, + proto.STRING, + number=2, + ) + network_config: "NetworkConfig" = proto.Field( + proto.MESSAGE, + number=3, + message="NetworkConfig", + ) + + +class NetworkConfig(proto.Message): + r"""Network configuration for the Dataproc Metastore service. + + Attributes: + consumers (MutableSequence[google.cloud.metastore_v1beta.types.NetworkConfig.Consumer]): + Immutable. The consumer-side network + configuration for the Dataproc Metastore + instance. + """ + + class Consumer(proto.Message): + r"""Contains information of the customer's network + configurations. + + + .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields + + Attributes: + subnetwork (str): + Immutable. The subnetwork of the customer project from which + an IP address is reserved and used as the Dataproc Metastore + service's endpoint. It is accessible to hosts in the subnet + and to all hosts in a subnet in the same region and same + network. There must be at least one IP address available in + the subnet's primary range. The subnet is specified in the + following form: + + ``projects/{project_number}/regions/{region_id}/subnetworks/{subnetwork_id}`` + + This field is a member of `oneof`_ ``vpc_resource``. + endpoint_uri (str): + Output only. The URI of the endpoint used to + access the metastore service. + """ + + subnetwork: str = proto.Field( + proto.STRING, + number=1, + oneof="vpc_resource", + ) + endpoint_uri: str = proto.Field( + proto.STRING, + number=3, + ) + + consumers: MutableSequence[Consumer] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=Consumer, + ) + + +class TelemetryConfig(proto.Message): + r"""Telemetry Configuration for the Dataproc Metastore service. + + Attributes: + log_format (google.cloud.metastore_v1beta.types.TelemetryConfig.LogFormat): + The output format of the Dataproc Metastore + service's logs. + """ + + class LogFormat(proto.Enum): + r"""""" + LOG_FORMAT_UNSPECIFIED = 0 + LEGACY = 1 + JSON = 2 + + log_format: LogFormat = proto.Field( + proto.ENUM, + number=1, + enum=LogFormat, + ) + + class MetadataManagementActivity(proto.Message): r"""The metadata management activities of the metastore service. Attributes: - metadata_exports (Sequence[google.cloud.metastore_v1beta.types.MetadataExport]): + metadata_exports (MutableSequence[google.cloud.metastore_v1beta.types.MetadataExport]): Output only. The latest metadata exports of the metastore service. - restores (Sequence[google.cloud.metastore_v1beta.types.Restore]): + restores (MutableSequence[google.cloud.metastore_v1beta.types.Restore]): Output only. The latest restores of the metastore service. """ - metadata_exports = proto.RepeatedField( + metadata_exports: MutableSequence["MetadataExport"] = proto.RepeatedField( proto.MESSAGE, number=1, message="MetadataExport", ) - restores = proto.RepeatedField( + restores: MutableSequence["Restore"] = proto.RepeatedField( proto.MESSAGE, number=2, message="Restore", @@ -434,10 +691,13 @@ class MetadataImport(proto.Message): The description of the metadata import. create_time (google.protobuf.timestamp_pb2.Timestamp): Output only. The time when the metadata - import was created. + import was started. update_time (google.protobuf.timestamp_pb2.Timestamp): Output only. The time when the metadata import was last updated. + end_time (google.protobuf.timestamp_pb2.Timestamp): + Output only. The time when the metadata + import finished. state (google.cloud.metastore_v1beta.types.MetadataImport.State): Output only. The current state of the metadata import. @@ -474,50 +734,55 @@ class DatabaseType(proto.Enum): DATABASE_TYPE_UNSPECIFIED = 0 MYSQL = 1 - database_type = proto.Field( + database_type: "MetadataImport.DatabaseDump.DatabaseType" = proto.Field( proto.ENUM, number=1, enum="MetadataImport.DatabaseDump.DatabaseType", ) - gcs_uri = proto.Field( + gcs_uri: str = proto.Field( proto.STRING, number=2, ) - source_database = proto.Field( + source_database: str = proto.Field( proto.STRING, number=3, ) - type_ = proto.Field( + type_: "DatabaseDumpSpec.Type" = proto.Field( proto.ENUM, number=4, enum="DatabaseDumpSpec.Type", ) - database_dump = proto.Field( + database_dump: DatabaseDump = proto.Field( proto.MESSAGE, number=6, oneof="metadata", message=DatabaseDump, ) - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - description = proto.Field( + description: str = proto.Field( proto.STRING, number=2, ) - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=3, message=timestamp_pb2.Timestamp, ) - update_time = proto.Field( + update_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=4, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=7, + message=timestamp_pb2.Timestamp, + ) + state: State = proto.Field( proto.ENUM, number=5, enum=State, @@ -556,27 +821,27 @@ class State(proto.Enum): FAILED = 3 CANCELLED = 4 - destination_gcs_uri = proto.Field( + destination_gcs_uri: str = proto.Field( proto.STRING, number=4, oneof="destination", ) - start_time = proto.Field( + start_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=3, enum=State, ) - database_dump_type = proto.Field( + database_dump_type: "DatabaseDumpSpec.Type" = proto.Field( proto.ENUM, number=5, enum="DatabaseDumpSpec.Type", @@ -605,6 +870,9 @@ class Backup(proto.Message): the time of backup. description (str): The description of the backup. + restoring_services (MutableSequence[str]): + Output only. Services that are restoring from + the backup. """ class State(proto.Enum): @@ -614,35 +882,40 @@ class State(proto.Enum): DELETING = 2 ACTIVE = 3 FAILED = 4 + RESTORING = 5 - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=3, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=4, enum=State, ) - service_revision = proto.Field( + service_revision: "Service" = proto.Field( proto.MESSAGE, number=5, message="Service", ) - description = proto.Field( + description: str = proto.Field( proto.STRING, number=6, ) + restoring_services: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=7, + ) class Restore(proto.Message): @@ -661,7 +934,7 @@ class Restore(proto.Message): Output only. The relative resource name of the metastore service backup to restore from, in the following form: - ``projects/{project_id}/locations/{location_id}/services/{service_id}/backups/{backup_id}`` + ``projects/{project_id}/locations/{location_id}/services/{service_id}/backups/{backup_id}``. type_ (google.cloud.metastore_v1beta.types.Restore.RestoreType): Output only. The type of restore. details (str): @@ -679,36 +952,36 @@ class State(proto.Enum): CANCELLED = 4 class RestoreType(proto.Enum): - r"""The type of restore.""" + r"""The type of restore. If unspecified, defaults to ``METADATA_ONLY``.""" RESTORE_TYPE_UNSPECIFIED = 0 FULL = 1 METADATA_ONLY = 2 - start_time = proto.Field( + start_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=3, enum=State, ) - backup = proto.Field( + backup: str = proto.Field( proto.STRING, number=4, ) - type_ = proto.Field( + type_: RestoreType = proto.Field( proto.ENUM, number=5, enum=RestoreType, ) - details = proto.Field( + details: str = proto.Field( proto.STRING, number=6, ) @@ -751,23 +1024,23 @@ class ListServicesRequest(proto.Message): order. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - page_size = proto.Field( + page_size: int = proto.Field( proto.INT32, number=2, ) - page_token = proto.Field( + page_token: str = proto.Field( proto.STRING, number=3, ) - filter = proto.Field( + filter: str = proto.Field( proto.STRING, number=4, ) - order_by = proto.Field( + order_by: str = proto.Field( proto.STRING, number=5, ) @@ -778,13 +1051,13 @@ class ListServicesResponse(proto.Message): [DataprocMetastore.ListServices][google.cloud.metastore.v1beta.DataprocMetastore.ListServices]. Attributes: - services (Sequence[google.cloud.metastore_v1beta.types.Service]): + services (MutableSequence[google.cloud.metastore_v1beta.types.Service]): The services in the specified location. next_page_token (str): A token that can be sent as ``page_token`` to retrieve the next page. If this field is omitted, there are no subsequent pages. - unreachable (Sequence[str]): + unreachable (MutableSequence[str]): Locations that could not be reached. """ @@ -792,16 +1065,16 @@ class ListServicesResponse(proto.Message): def raw_page(self): return self - services = proto.RepeatedField( + services: MutableSequence["Service"] = proto.RepeatedField( proto.MESSAGE, number=1, message="Service", ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - unreachable = proto.RepeatedField( + unreachable: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=3, ) @@ -819,7 +1092,7 @@ class GetServiceRequest(proto.Message): ``projects/{project_number}/locations/{location_id}/services/{service_id}``. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -865,20 +1138,20 @@ class CreateServiceRequest(proto.Message): supported. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - service_id = proto.Field( + service_id: str = proto.Field( proto.STRING, number=2, ) - service = proto.Field( + service: "Service" = proto.Field( proto.MESSAGE, number=3, message="Service", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -920,17 +1193,17 @@ class UpdateServiceRequest(proto.Message): supported. """ - update_mask = proto.Field( + update_mask: field_mask_pb2.FieldMask = proto.Field( proto.MESSAGE, number=1, message=field_mask_pb2.FieldMask, ) - service = proto.Field( + service: "Service" = proto.Field( proto.MESSAGE, number=2, message="Service", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=3, ) @@ -964,11 +1237,11 @@ class DeleteServiceRequest(proto.Message): supported. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=2, ) @@ -1011,23 +1284,23 @@ class ListMetadataImportsRequest(proto.Message): order. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - page_size = proto.Field( + page_size: int = proto.Field( proto.INT32, number=2, ) - page_token = proto.Field( + page_token: str = proto.Field( proto.STRING, number=3, ) - filter = proto.Field( + filter: str = proto.Field( proto.STRING, number=4, ) - order_by = proto.Field( + order_by: str = proto.Field( proto.STRING, number=5, ) @@ -1038,13 +1311,13 @@ class ListMetadataImportsResponse(proto.Message): [DataprocMetastore.ListMetadataImports][google.cloud.metastore.v1beta.DataprocMetastore.ListMetadataImports]. Attributes: - metadata_imports (Sequence[google.cloud.metastore_v1beta.types.MetadataImport]): + metadata_imports (MutableSequence[google.cloud.metastore_v1beta.types.MetadataImport]): The imports in the specified service. next_page_token (str): A token that can be sent as ``page_token`` to retrieve the next page. If this field is omitted, there are no subsequent pages. - unreachable (Sequence[str]): + unreachable (MutableSequence[str]): Locations that could not be reached. """ @@ -1052,16 +1325,16 @@ class ListMetadataImportsResponse(proto.Message): def raw_page(self): return self - metadata_imports = proto.RepeatedField( + metadata_imports: MutableSequence["MetadataImport"] = proto.RepeatedField( proto.MESSAGE, number=1, message="MetadataImport", ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - unreachable = proto.RepeatedField( + unreachable: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=3, ) @@ -1079,7 +1352,7 @@ class GetMetadataImportRequest(proto.Message): ``projects/{project_number}/locations/{location_id}/services/{service_id}/metadataImports/{import_id}``. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -1094,7 +1367,7 @@ class CreateMetadataImportRequest(proto.Message): Required. The relative resource name of the service in which to create a metastore import, in the following form: - ``projects/{project_number}/locations/{location_id}/services/{service_id}`` + ``projects/{project_number}/locations/{location_id}/services/{service_id}``. metadata_import_id (str): Required. The ID of the metadata import, which is used as the final component of the @@ -1125,20 +1398,20 @@ class CreateMetadataImportRequest(proto.Message): supported. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - metadata_import_id = proto.Field( + metadata_import_id: str = proto.Field( proto.STRING, number=2, ) - metadata_import = proto.Field( + metadata_import: "MetadataImport" = proto.Field( proto.MESSAGE, number=3, message="MetadataImport", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -1180,17 +1453,17 @@ class UpdateMetadataImportRequest(proto.Message): supported. """ - update_mask = proto.Field( + update_mask: field_mask_pb2.FieldMask = proto.Field( proto.MESSAGE, number=1, message=field_mask_pb2.FieldMask, ) - metadata_import = proto.Field( + metadata_import: "MetadataImport" = proto.Field( proto.MESSAGE, number=2, message="MetadataImport", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=3, ) @@ -1233,23 +1506,23 @@ class ListBackupsRequest(proto.Message): order. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - page_size = proto.Field( + page_size: int = proto.Field( proto.INT32, number=2, ) - page_token = proto.Field( + page_token: str = proto.Field( proto.STRING, number=3, ) - filter = proto.Field( + filter: str = proto.Field( proto.STRING, number=4, ) - order_by = proto.Field( + order_by: str = proto.Field( proto.STRING, number=5, ) @@ -1260,13 +1533,13 @@ class ListBackupsResponse(proto.Message): [DataprocMetastore.ListBackups][google.cloud.metastore.v1beta.DataprocMetastore.ListBackups]. Attributes: - backups (Sequence[google.cloud.metastore_v1beta.types.Backup]): + backups (MutableSequence[google.cloud.metastore_v1beta.types.Backup]): The backups of the specified service. next_page_token (str): A token that can be sent as ``page_token`` to retrieve the next page. If this field is omitted, there are no subsequent pages. - unreachable (Sequence[str]): + unreachable (MutableSequence[str]): Locations that could not be reached. """ @@ -1274,16 +1547,16 @@ class ListBackupsResponse(proto.Message): def raw_page(self): return self - backups = proto.RepeatedField( + backups: MutableSequence["Backup"] = proto.RepeatedField( proto.MESSAGE, number=1, message="Backup", ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - unreachable = proto.RepeatedField( + unreachable: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=3, ) @@ -1301,7 +1574,7 @@ class GetBackupRequest(proto.Message): ``projects/{project_number}/locations/{location_id}/services/{service_id}/backups/{backup_id}``. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -1316,7 +1589,7 @@ class CreateBackupRequest(proto.Message): Required. The relative resource name of the service in which to create a backup of the following form: - ``projects/{project_number}/locations/{location_id}/services/{service_id}`` + ``projects/{project_number}/locations/{location_id}/services/{service_id}``. backup_id (str): Required. The ID of the backup, which is used as the final component of the backup's name. @@ -1347,20 +1620,20 @@ class CreateBackupRequest(proto.Message): supported. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - backup_id = proto.Field( + backup_id: str = proto.Field( proto.STRING, number=2, ) - backup = proto.Field( + backup: "Backup" = proto.Field( proto.MESSAGE, number=3, message="Backup", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -1394,11 +1667,11 @@ class DeleteBackupRequest(proto.Message): supported. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=2, ) @@ -1423,7 +1696,7 @@ class ExportMetadataRequest(proto.Message): Required. The relative resource name of the metastore service to run export, in the following form: - ``projects/{project_id}/locations/{location_id}/services/{service_id}`` + ``projects/{project_id}/locations/{location_id}/services/{service_id}``. request_id (str): Optional. A request ID. Specify a unique request ID to allow the server to ignore the request if it has completed. The @@ -1445,20 +1718,20 @@ class ExportMetadataRequest(proto.Message): defaults to ``MYSQL``. """ - destination_gcs_folder = proto.Field( + destination_gcs_folder: str = proto.Field( proto.STRING, number=2, oneof="destination", ) - service = proto.Field( + service: str = proto.Field( proto.STRING, number=1, ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=3, ) - database_dump_type = proto.Field( + database_dump_type: "DatabaseDumpSpec.Type" = proto.Field( proto.ENUM, number=4, enum="DatabaseDumpSpec.Type", @@ -1473,12 +1746,12 @@ class RestoreServiceRequest(proto.Message): Required. The relative resource name of the metastore service to run restore, in the following form: - ``projects/{project_id}/locations/{location_id}/services/{service_id}`` + ``projects/{project_id}/locations/{location_id}/services/{service_id}``. backup (str): Required. The relative resource name of the metastore service backup to restore from, in the following form: - ``projects/{project_id}/locations/{location_id}/services/{service_id}/backups/{backup_id}`` + ``projects/{project_id}/locations/{location_id}/services/{service_id}/backups/{backup_id}``. restore_type (google.cloud.metastore_v1beta.types.Restore.RestoreType): Optional. The type of restore. If unspecified, defaults to ``METADATA_ONLY``. @@ -1500,20 +1773,20 @@ class RestoreServiceRequest(proto.Message): supported. """ - service = proto.Field( + service: str = proto.Field( proto.STRING, number=1, ) - backup = proto.Field( + backup: str = proto.Field( proto.STRING, number=2, ) - restore_type = proto.Field( + restore_type: "Restore.RestoreType" = proto.Field( proto.ENUM, number=3, enum="Restore.RestoreType", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -1549,33 +1822,33 @@ class OperationMetadata(proto.Message): operation. """ - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - target = proto.Field( + target: str = proto.Field( proto.STRING, number=3, ) - verb = proto.Field( + verb: str = proto.Field( proto.STRING, number=4, ) - status_message = proto.Field( + status_message: str = proto.Field( proto.STRING, number=5, ) - requested_cancellation = proto.Field( + requested_cancellation: bool = proto.Field( proto.BOOL, number=6, ) - api_version = proto.Field( + api_version: str = proto.Field( proto.STRING, number=7, ) @@ -1585,7 +1858,7 @@ class LocationMetadata(proto.Message): r"""Metadata about the service in a location. Attributes: - supported_hive_metastore_versions (Sequence[google.cloud.metastore_v1beta.types.LocationMetadata.HiveMetastoreVersion]): + supported_hive_metastore_versions (MutableSequence[google.cloud.metastore_v1beta.types.LocationMetadata.HiveMetastoreVersion]): The versions of Hive Metastore that can be used when creating a new metastore service in this location. The server guarantees that exactly one ``HiveMetastoreVersion`` @@ -1606,16 +1879,18 @@ class HiveMetastoreVersion(proto.Message): that omits the ``version``. """ - version = proto.Field( + version: str = proto.Field( proto.STRING, number=1, ) - is_default = proto.Field( + is_default: bool = proto.Field( proto.BOOL, number=2, ) - supported_hive_metastore_versions = proto.RepeatedField( + supported_hive_metastore_versions: MutableSequence[ + HiveMetastoreVersion + ] = proto.RepeatedField( proto.MESSAGE, number=1, message=HiveMetastoreVersion, @@ -1632,6 +1907,7 @@ class Type(proto.Enum): r"""The type of the database dump.""" TYPE_UNSPECIFIED = 0 MYSQL = 1 + AVRO = 2 __all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/google/cloud/metastore_v1beta/types/metastore_federation.py b/google/cloud/metastore_v1beta/types/metastore_federation.py new file mode 100644 index 0000000..cd94d9f --- /dev/null +++ b/google/cloud/metastore_v1beta/types/metastore_federation.py @@ -0,0 +1,432 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +from typing import MutableMapping, MutableSequence + +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore +import proto # type: ignore + +__protobuf__ = proto.module( + package="google.cloud.metastore.v1beta", + manifest={ + "Federation", + "BackendMetastore", + "ListFederationsRequest", + "ListFederationsResponse", + "GetFederationRequest", + "CreateFederationRequest", + "UpdateFederationRequest", + "DeleteFederationRequest", + }, +) + + +class Federation(proto.Message): + r"""Represents a federation of multiple backend metastores. + + Attributes: + name (str): + Immutable. The relative resource name of the federation, of + the form: + projects/{project_number}/locations/{location_id}/federations/{federation_id}`. + create_time (google.protobuf.timestamp_pb2.Timestamp): + Output only. The time when the metastore + federation was created. + update_time (google.protobuf.timestamp_pb2.Timestamp): + Output only. The time when the metastore + federation was last updated. + labels (MutableMapping[str, str]): + User-defined labels for the metastore + federation. + version (str): + Immutable. The Apache Hive metastore version + of the federation. All backend metastore + versions must be compatible with the federation + version. + backend_metastores (MutableMapping[int, google.cloud.metastore_v1beta.types.BackendMetastore]): + A map from ``BackendMetastore`` rank to + ``BackendMetastore``\ s from which the federation service + serves metadata at query time. The map key represents the + order in which ``BackendMetastore``\ s should be evaluated + to resolve database names at query time and should be + greater than or equal to zero. A ``BackendMetastore`` with a + lower number will be evaluated before a ``BackendMetastore`` + with a higher number. + endpoint_uri (str): + Output only. The federation endpoint. + state (google.cloud.metastore_v1beta.types.Federation.State): + Output only. The current state of the + federation. + state_message (str): + Output only. Additional information about the + current state of the metastore federation, if + available. + uid (str): + Output only. The globally unique resource + identifier of the metastore federation. + """ + + class State(proto.Enum): + r"""The current state of the federation.""" + STATE_UNSPECIFIED = 0 + CREATING = 1 + ACTIVE = 2 + UPDATING = 3 + DELETING = 4 + ERROR = 5 + + name: str = proto.Field( + proto.STRING, + number=1, + ) + create_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=2, + message=timestamp_pb2.Timestamp, + ) + update_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=3, + message=timestamp_pb2.Timestamp, + ) + labels: MutableMapping[str, str] = proto.MapField( + proto.STRING, + proto.STRING, + number=4, + ) + version: str = proto.Field( + proto.STRING, + number=5, + ) + backend_metastores: MutableMapping[int, "BackendMetastore"] = proto.MapField( + proto.INT32, + proto.MESSAGE, + number=6, + message="BackendMetastore", + ) + endpoint_uri: str = proto.Field( + proto.STRING, + number=7, + ) + state: State = proto.Field( + proto.ENUM, + number=8, + enum=State, + ) + state_message: str = proto.Field( + proto.STRING, + number=9, + ) + uid: str = proto.Field( + proto.STRING, + number=10, + ) + + +class BackendMetastore(proto.Message): + r"""Represents a backend metastore for the federation. + + Attributes: + name (str): + The relative resource name of the metastore that is being + federated. The formats of the relative resource names for + the currently supported metastores are listed below: + + - Dataplex + + - ``projects/{project_id}/locations/{location}/lakes/{lake_id}`` + + - BigQuery + + - ``projects/{project_id}`` + + - Dataproc Metastore + + - ``projects/{project_id}/locations/{location}/services/{service_id}`` + metastore_type (google.cloud.metastore_v1beta.types.BackendMetastore.MetastoreType): + The type of the backend metastore. + """ + + class MetastoreType(proto.Enum): + r"""The type of the backend metastore.""" + METASTORE_TYPE_UNSPECIFIED = 0 + BIGQUERY = 2 + DATAPROC_METASTORE = 3 + + name: str = proto.Field( + proto.STRING, + number=1, + ) + metastore_type: MetastoreType = proto.Field( + proto.ENUM, + number=2, + enum=MetastoreType, + ) + + +class ListFederationsRequest(proto.Message): + r"""Request message for ListFederations. + + Attributes: + parent (str): + Required. The relative resource name of the location of + metastore federations to list, in the following form: + ``projects/{project_number}/locations/{location_id}``. + page_size (int): + Optional. The maximum number of federations + to return. The response may contain less than + the maximum number. If unspecified, no more than + 500 services are returned. The maximum value is + 1000; values above 1000 are changed to 1000. + page_token (str): + Optional. A page token, received from a + previous ListFederationServices call. Provide + this token to retrieve the subsequent page. + To retrieve the first page, supply an empty page + token. + When paginating, other parameters provided to + ListFederationServices must match the call that + provided the page token. + filter (str): + Optional. The filter to apply to list + results. + order_by (str): + Optional. Specify the ordering of results as described in + `Sorting + Order `__. + If not specified, the results will be sorted in the default + order. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + page_size: int = proto.Field( + proto.INT32, + number=2, + ) + page_token: str = proto.Field( + proto.STRING, + number=3, + ) + filter: str = proto.Field( + proto.STRING, + number=4, + ) + order_by: str = proto.Field( + proto.STRING, + number=5, + ) + + +class ListFederationsResponse(proto.Message): + r"""Response message for ListFederations + + Attributes: + federations (MutableSequence[google.cloud.metastore_v1beta.types.Federation]): + The services in the specified location. + next_page_token (str): + A token that can be sent as ``page_token`` to retrieve the + next page. If this field is omitted, there are no subsequent + pages. + unreachable (MutableSequence[str]): + Locations that could not be reached. + """ + + @property + def raw_page(self): + return self + + federations: MutableSequence["Federation"] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message="Federation", + ) + next_page_token: str = proto.Field( + proto.STRING, + number=2, + ) + unreachable: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=3, + ) + + +class GetFederationRequest(proto.Message): + r"""Request message for GetFederation. + + Attributes: + name (str): + Required. The relative resource name of the metastore + federation to retrieve, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class CreateFederationRequest(proto.Message): + r"""Request message for CreateFederation. + + Attributes: + parent (str): + Required. The relative resource name of the location in + which to create a federation service, in the following form: + + ``projects/{project_number}/locations/{location_id}``. + federation_id (str): + Required. The ID of the metastore federation, + which is used as the final component of the + metastore federation's name. + This value must be between 2 and 63 characters + long inclusive, begin with a letter, end with a + letter or number, and consist of alpha-numeric + ASCII characters or hyphens. + federation (google.cloud.metastore_v1beta.types.Federation): + Required. The Metastore Federation to create. The ``name`` + field is ignored. The ID of the created metastore federation + must be provided in the request's ``federation_id`` field. + request_id (str): + Optional. A request ID. Specify a unique request ID to allow + the server to ignore the request if it has completed. The + server will ignore subsequent requests that provide a + duplicate request ID for at least 60 minutes after the first + request. + + For example, if an initial request times out, followed by + another request with the same request ID, the server ignores + the second request to prevent the creation of duplicate + commitments. + + The request ID must be a valid + `UUID `__ + A zero UUID (00000000-0000-0000-0000-000000000000) is not + supported. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + federation_id: str = proto.Field( + proto.STRING, + number=2, + ) + federation: "Federation" = proto.Field( + proto.MESSAGE, + number=3, + message="Federation", + ) + request_id: str = proto.Field( + proto.STRING, + number=4, + ) + + +class UpdateFederationRequest(proto.Message): + r"""Request message for UpdateFederation. + + Attributes: + update_mask (google.protobuf.field_mask_pb2.FieldMask): + Required. A field mask used to specify the fields to be + overwritten in the metastore federation resource by the + update. Fields specified in the ``update_mask`` are relative + to the resource (not to the full request). A field is + overwritten if it is in the mask. + federation (google.cloud.metastore_v1beta.types.Federation): + Required. The metastore federation to update. The server + only merges fields in the service if they are specified in + ``update_mask``. + + The metastore federation's ``name`` field is used to + identify the metastore service to be updated. + request_id (str): + Optional. A request ID. Specify a unique request ID to allow + the server to ignore the request if it has completed. The + server will ignore subsequent requests that provide a + duplicate request ID for at least 60 minutes after the first + request. + + For example, if an initial request times out, followed by + another request with the same request ID, the server ignores + the second request to prevent the creation of duplicate + commitments. + + The request ID must be a valid + `UUID `__ + A zero UUID (00000000-0000-0000-0000-000000000000) is not + supported. + """ + + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=1, + message=field_mask_pb2.FieldMask, + ) + federation: "Federation" = proto.Field( + proto.MESSAGE, + number=2, + message="Federation", + ) + request_id: str = proto.Field( + proto.STRING, + number=3, + ) + + +class DeleteFederationRequest(proto.Message): + r"""Request message for DeleteFederation. + + Attributes: + name (str): + Required. The relative resource name of the metastore + federation to delete, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + request_id (str): + Optional. A request ID. Specify a unique request ID to allow + the server to ignore the request if it has completed. The + server will ignore subsequent requests that provide a + duplicate request ID for at least 60 minutes after the first + request. + + For example, if an initial request times out, followed by + another request with the same request ID, the server ignores + the second request to prevent the creation of duplicate + commitments. + + The request ID must be a valid + `UUID `__ + A zero UUID (00000000-0000-0000-0000-000000000000) is not + supported. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + request_id: str = proto.Field( + proto.STRING, + number=2, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/noxfile.py b/noxfile.py index ffe9f35..d8440c0 100644 --- a/noxfile.py +++ b/noxfile.py @@ -273,12 +273,16 @@ def cover(session): session.run("coverage", "erase") -@nox.session(python=DEFAULT_PYTHON_VERSION) +@nox.session(python="3.9") def docs(session): """Build the docs for this library.""" session.install("-e", ".") - session.install("sphinx==4.0.1", "alabaster", "recommonmark") + session.install( + "sphinx==4.0.1", + "alabaster", + "recommonmark", + ) shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) session.run( @@ -295,13 +299,16 @@ def docs(session): ) -@nox.session(python=DEFAULT_PYTHON_VERSION) +@nox.session(python="3.9") def docfx(session): """Build the docfx yaml files for this library.""" session.install("-e", ".") session.install( - "sphinx==4.0.1", "alabaster", "recommonmark", "gcp-sphinx-docfx-yaml" + "sphinx==4.0.1", + "alabaster", + "recommonmark", + "gcp-sphinx-docfx-yaml", ) shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) diff --git a/owlbot.py b/owlbot.py new file mode 100644 index 0000000..ce738f0 --- /dev/null +++ b/owlbot.py @@ -0,0 +1,56 @@ +# Copyright 2022 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 json +from pathlib import Path +import shutil + +import synthtool as s +import synthtool.gcp as gcp +from synthtool.languages import python + +# ---------------------------------------------------------------------------- +# Copy the generated client from the owl-bot staging directory +# ---------------------------------------------------------------------------- + +clean_up_generated_samples = True + +# Load the default version defined in .repo-metadata.json. +default_version = json.load(open(".repo-metadata.json", "rt")).get( + "default_version" +) + +for library in s.get_staging_dirs(default_version): + if clean_up_generated_samples: + shutil.rmtree("samples/generated_samples", ignore_errors=True) + clean_up_generated_samples = False + s.move([library], excludes=["**/gapic_version.py"]) +s.remove_staging_dirs() + +# ---------------------------------------------------------------------------- +# Add templated files +# ---------------------------------------------------------------------------- + +templated_files = gcp.CommonTemplates().py_library( + cov_level=100, + microgenerator=True, + versions=gcp.common.detect_versions(path="./google", default_first=True), +) +s.move(templated_files, excludes=[".coveragerc", ".github/release-please.yml"]) + +python.py_samples(skip_readmes=True) + +# run format session for all directories which have a noxfile +for noxfile in Path(".").glob("**/noxfile.py"): + s.shell.run(["nox", "-s", "format"], cwd=noxfile.parent, hide_output=False) diff --git a/release-please-config.json b/release-please-config.json new file mode 100644 index 0000000..bdd3b5e --- /dev/null +++ b/release-please-config.json @@ -0,0 +1,36 @@ +{ + "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", + "packages": { + ".": { + "release-type": "python", + "extra-files": [ + "google/cloud/metastore_v1/gapic_version.py", + "google/cloud/metastore_v1alpha/gapic_version.py", + "google/cloud/metastore/gapic_version.py", + "google/cloud/metastore_v1beta/gapic_version.py", + { + "type": "json", + "path": "samples/generated_samples/snippet_metadata_google.cloud.metastore.v1.json", + "jsonpath": "$.clientLibrary.version" + }, + { + "type": "json", + "path": "samples/generated_samples/snippet_metadata_google.cloud.metastore.v1beta.json", + "jsonpath": "$.clientLibrary.version" + }, + { + "type": "json", + "path": "samples/generated_samples/snippet_metadata_google.cloud.metastore.v1alpha.json", + "jsonpath": "$.clientLibrary.version" + } + ] + } + }, + "release-type": "python", + "plugins": [ + { + "type": "sentence-case" + } + ], + "initial-version": "0.1.0" +} diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_backup_async.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_backup_async.py index 1d7091e..69442fe 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_backup_async.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_backup_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_CreateBackup_async] @@ -49,7 +49,7 @@ async def sample_create_backup(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_backup_sync.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_backup_sync.py index 91fbcd0..4413ea7 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_backup_sync.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_backup_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_CreateBackup_sync] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_metadata_import_async.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_metadata_import_async.py index 904d784..e7b3dc8 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_metadata_import_async.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_metadata_import_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_CreateMetadataImport_async] @@ -49,7 +49,7 @@ async def sample_create_metadata_import(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_metadata_import_sync.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_metadata_import_sync.py index 84a80f6..4ebc7ff 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_metadata_import_sync.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_metadata_import_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_CreateMetadataImport_sync] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_service_async.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_service_async.py index 6286dd0..5745292 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_service_async.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_service_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_CreateService_async] @@ -49,7 +49,7 @@ async def sample_create_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_service_sync.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_service_sync.py index 176d18f..834d1c2 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_service_sync.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_service_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_CreateService_sync] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_backup_async.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_backup_async.py index b6d4af2..9ef02b0 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_backup_async.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_backup_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_DeleteBackup_async] @@ -48,7 +48,7 @@ async def sample_delete_backup(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_backup_sync.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_backup_sync.py index 68c9a6f..c778e38 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_backup_sync.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_backup_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_DeleteBackup_sync] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_service_async.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_service_async.py index 7a684ed..b7fa01c 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_service_async.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_service_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_DeleteService_async] @@ -48,7 +48,7 @@ async def sample_delete_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_service_sync.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_service_sync.py index efdbbe8..eb60bd1 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_service_sync.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_service_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_DeleteService_sync] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_export_metadata_async.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_export_metadata_async.py index 505fdac..c953b07 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_export_metadata_async.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_export_metadata_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_ExportMetadata_async] @@ -49,7 +49,7 @@ async def sample_export_metadata(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_export_metadata_sync.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_export_metadata_sync.py index 6806954..7ad998d 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_export_metadata_sync.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_export_metadata_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_ExportMetadata_sync] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_create_federation_async.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_create_federation_async.py new file mode 100644 index 0000000..b37f7c4 --- /dev/null +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_create_federation_async.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1_generated_DataprocMetastoreFederation_CreateFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1 + + +async def sample_create_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END metastore_v1_generated_DataprocMetastoreFederation_CreateFederation_async] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_create_federation_sync.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_create_federation_sync.py new file mode 100644 index 0000000..3ab09fb --- /dev/null +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_create_federation_sync.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1_generated_DataprocMetastoreFederation_CreateFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1 + + +def sample_create_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END metastore_v1_generated_DataprocMetastoreFederation_CreateFederation_sync] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_delete_federation_async.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_delete_federation_async.py new file mode 100644 index 0000000..7e2111b --- /dev/null +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_delete_federation_async.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1_generated_DataprocMetastoreFederation_DeleteFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1 + + +async def sample_delete_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END metastore_v1_generated_DataprocMetastoreFederation_DeleteFederation_async] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_delete_federation_sync.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_delete_federation_sync.py new file mode 100644 index 0000000..8894355 --- /dev/null +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_delete_federation_sync.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1_generated_DataprocMetastoreFederation_DeleteFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1 + + +def sample_delete_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END metastore_v1_generated_DataprocMetastoreFederation_DeleteFederation_sync] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_get_federation_async.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_get_federation_async.py new file mode 100644 index 0000000..32eb62c --- /dev/null +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_get_federation_async.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1_generated_DataprocMetastoreFederation_GetFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1 + + +async def sample_get_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = await client.get_federation(request=request) + + # Handle the response + print(response) + +# [END metastore_v1_generated_DataprocMetastoreFederation_GetFederation_async] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_get_federation_sync.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_get_federation_sync.py new file mode 100644 index 0000000..0fcfb47 --- /dev/null +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_get_federation_sync.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1_generated_DataprocMetastoreFederation_GetFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1 + + +def sample_get_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = client.get_federation(request=request) + + # Handle the response + print(response) + +# [END metastore_v1_generated_DataprocMetastoreFederation_GetFederation_sync] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_list_federations_async.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_list_federations_async.py new file mode 100644 index 0000000..022d09a --- /dev/null +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_list_federations_async.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListFederations +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1_generated_DataprocMetastoreFederation_ListFederations_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1 + + +async def sample_list_federations(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END metastore_v1_generated_DataprocMetastoreFederation_ListFederations_async] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_list_federations_sync.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_list_federations_sync.py new file mode 100644 index 0000000..7870e25 --- /dev/null +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_list_federations_sync.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListFederations +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1_generated_DataprocMetastoreFederation_ListFederations_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1 + + +def sample_list_federations(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END metastore_v1_generated_DataprocMetastoreFederation_ListFederations_sync] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_update_federation_async.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_update_federation_async.py new file mode 100644 index 0000000..968cc28 --- /dev/null +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_update_federation_async.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1_generated_DataprocMetastoreFederation_UpdateFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1 + + +async def sample_update_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END metastore_v1_generated_DataprocMetastoreFederation_UpdateFederation_async] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_update_federation_sync.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_update_federation_sync.py new file mode 100644 index 0000000..19d562d --- /dev/null +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_update_federation_sync.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1_generated_DataprocMetastoreFederation_UpdateFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1 + + +def sample_update_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END metastore_v1_generated_DataprocMetastoreFederation_UpdateFederation_sync] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_backup_async.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_backup_async.py index def36bb..2a5b5b6 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_backup_async.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_backup_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_GetBackup_async] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_backup_sync.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_backup_sync.py index 6c0986e..130627f 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_backup_sync.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_backup_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_GetBackup_sync] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_metadata_import_async.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_metadata_import_async.py index 410a44a..2b47559 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_metadata_import_async.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_metadata_import_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_GetMetadataImport_async] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_metadata_import_sync.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_metadata_import_sync.py index 7ca7e97..a8405ac 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_metadata_import_sync.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_metadata_import_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_GetMetadataImport_sync] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_service_async.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_service_async.py index 87f67ec..fb7eb80 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_service_async.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_service_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_GetService_async] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_service_sync.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_service_sync.py index e92c66a..b6f159d 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_service_sync.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_service_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_GetService_sync] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_backups_async.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_backups_async.py index c81ed55..195a24e 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_backups_async.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_backups_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_ListBackups_async] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_backups_sync.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_backups_sync.py index b28de60..f8d6e87 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_backups_sync.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_backups_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_ListBackups_sync] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_metadata_imports_async.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_metadata_imports_async.py index 5ef0123..607070a 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_metadata_imports_async.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_metadata_imports_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_ListMetadataImports_async] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_metadata_imports_sync.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_metadata_imports_sync.py index 44b0478..ccd7e8b 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_metadata_imports_sync.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_metadata_imports_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_ListMetadataImports_sync] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_services_async.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_services_async.py index 6a19d9c..49bb65b 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_services_async.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_services_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_ListServices_async] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_services_sync.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_services_sync.py index e5eb62e..bd44a5d 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_services_sync.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_services_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_ListServices_sync] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_restore_service_async.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_restore_service_async.py index e7b68c0..b849711 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_restore_service_async.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_restore_service_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_RestoreService_async] @@ -49,7 +49,7 @@ async def sample_restore_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_restore_service_sync.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_restore_service_sync.py index 6b001d9..18bc577 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_restore_service_sync.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_restore_service_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_RestoreService_sync] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_metadata_import_async.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_metadata_import_async.py index 5e37701..4175af0 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_metadata_import_async.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_metadata_import_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_UpdateMetadataImport_async] @@ -47,7 +47,7 @@ async def sample_update_metadata_import(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_metadata_import_sync.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_metadata_import_sync.py index a31b74f..28a7d91 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_metadata_import_sync.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_metadata_import_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_UpdateMetadataImport_sync] diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_service_async.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_service_async.py index 3b60a16..b9f8cad 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_service_async.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_service_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_UpdateService_async] @@ -47,7 +47,7 @@ async def sample_update_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_service_sync.py b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_service_sync.py index 425d46c..c1c2e3b 100644 --- a/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_service_sync.py +++ b/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_service_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_UpdateService_sync] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_backup_async.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_backup_async.py index 17a2ac6..5ffea86 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_backup_async.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_backup_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_CreateBackup_async] @@ -49,7 +49,7 @@ async def sample_create_backup(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_backup_sync.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_backup_sync.py index 233f29b..e0d1927 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_backup_sync.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_backup_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_CreateBackup_sync] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_metadata_import_async.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_metadata_import_async.py index e57cfc3..a08e079 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_metadata_import_async.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_metadata_import_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_CreateMetadataImport_async] @@ -49,7 +49,7 @@ async def sample_create_metadata_import(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_metadata_import_sync.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_metadata_import_sync.py index 37ab474..617e51b 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_metadata_import_sync.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_metadata_import_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_CreateMetadataImport_sync] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_service_async.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_service_async.py index d668784..fa6cebb 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_service_async.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_service_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_CreateService_async] @@ -49,7 +49,7 @@ async def sample_create_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_service_sync.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_service_sync.py index 85f86bb..781c5da 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_service_sync.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_service_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_CreateService_sync] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_backup_async.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_backup_async.py index 7b1adac..885d7a0 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_backup_async.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_backup_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_DeleteBackup_async] @@ -48,7 +48,7 @@ async def sample_delete_backup(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_backup_sync.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_backup_sync.py index ebe928f..0a3890b 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_backup_sync.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_backup_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_DeleteBackup_sync] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_service_async.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_service_async.py index da437d1..07c45a9 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_service_async.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_service_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_DeleteService_async] @@ -48,7 +48,7 @@ async def sample_delete_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_service_sync.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_service_sync.py index 228349e..2cb7e29 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_service_sync.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_service_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_DeleteService_sync] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_export_metadata_async.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_export_metadata_async.py index 93ce585..327a8f6 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_export_metadata_async.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_export_metadata_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_ExportMetadata_async] @@ -49,7 +49,7 @@ async def sample_export_metadata(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_export_metadata_sync.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_export_metadata_sync.py index 33e3c36..82b1b35 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_export_metadata_sync.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_export_metadata_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_ExportMetadata_sync] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_create_federation_async.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_create_federation_async.py new file mode 100644 index 0000000..71b27b8 --- /dev/null +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_create_federation_async.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1alpha_generated_DataprocMetastoreFederation_CreateFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1alpha + + +async def sample_create_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1alpha.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END metastore_v1alpha_generated_DataprocMetastoreFederation_CreateFederation_async] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_create_federation_sync.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_create_federation_sync.py new file mode 100644 index 0000000..7525aa0 --- /dev/null +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_create_federation_sync.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1alpha_generated_DataprocMetastoreFederation_CreateFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1alpha + + +def sample_create_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1alpha.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END metastore_v1alpha_generated_DataprocMetastoreFederation_CreateFederation_sync] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_delete_federation_async.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_delete_federation_async.py new file mode 100644 index 0000000..1b3ad6a --- /dev/null +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_delete_federation_async.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1alpha_generated_DataprocMetastoreFederation_DeleteFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1alpha + + +async def sample_delete_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1alpha.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END metastore_v1alpha_generated_DataprocMetastoreFederation_DeleteFederation_async] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_delete_federation_sync.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_delete_federation_sync.py new file mode 100644 index 0000000..a43c7d5 --- /dev/null +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_delete_federation_sync.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1alpha_generated_DataprocMetastoreFederation_DeleteFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1alpha + + +def sample_delete_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1alpha.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END metastore_v1alpha_generated_DataprocMetastoreFederation_DeleteFederation_sync] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_get_federation_async.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_get_federation_async.py new file mode 100644 index 0000000..85fcb91 --- /dev/null +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_get_federation_async.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1alpha_generated_DataprocMetastoreFederation_GetFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1alpha + + +async def sample_get_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1alpha.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = await client.get_federation(request=request) + + # Handle the response + print(response) + +# [END metastore_v1alpha_generated_DataprocMetastoreFederation_GetFederation_async] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_get_federation_sync.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_get_federation_sync.py new file mode 100644 index 0000000..3e84d21 --- /dev/null +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_get_federation_sync.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1alpha_generated_DataprocMetastoreFederation_GetFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1alpha + + +def sample_get_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1alpha.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = client.get_federation(request=request) + + # Handle the response + print(response) + +# [END metastore_v1alpha_generated_DataprocMetastoreFederation_GetFederation_sync] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_list_federations_async.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_list_federations_async.py new file mode 100644 index 0000000..12b8c97 --- /dev/null +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_list_federations_async.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListFederations +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1alpha_generated_DataprocMetastoreFederation_ListFederations_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1alpha + + +async def sample_list_federations(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1alpha.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END metastore_v1alpha_generated_DataprocMetastoreFederation_ListFederations_async] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_list_federations_sync.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_list_federations_sync.py new file mode 100644 index 0000000..e7f46a1 --- /dev/null +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_list_federations_sync.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListFederations +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1alpha_generated_DataprocMetastoreFederation_ListFederations_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1alpha + + +def sample_list_federations(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1alpha.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END metastore_v1alpha_generated_DataprocMetastoreFederation_ListFederations_sync] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_update_federation_async.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_update_federation_async.py new file mode 100644 index 0000000..e5ee982 --- /dev/null +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_update_federation_async.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1alpha_generated_DataprocMetastoreFederation_UpdateFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1alpha + + +async def sample_update_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1alpha.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END metastore_v1alpha_generated_DataprocMetastoreFederation_UpdateFederation_async] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_update_federation_sync.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_update_federation_sync.py new file mode 100644 index 0000000..043b725 --- /dev/null +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_update_federation_sync.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1alpha_generated_DataprocMetastoreFederation_UpdateFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1alpha + + +def sample_update_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1alpha.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END metastore_v1alpha_generated_DataprocMetastoreFederation_UpdateFederation_sync] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_backup_async.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_backup_async.py index 90bf977..60b0f22 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_backup_async.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_backup_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_GetBackup_async] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_backup_sync.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_backup_sync.py index 19bb391..0fc4889 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_backup_sync.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_backup_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_GetBackup_sync] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_metadata_import_async.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_metadata_import_async.py index 13c31ee..7c56851 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_metadata_import_async.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_metadata_import_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_GetMetadataImport_async] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_metadata_import_sync.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_metadata_import_sync.py index 059c9ff..fc35d7b 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_metadata_import_sync.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_metadata_import_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_GetMetadataImport_sync] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_service_async.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_service_async.py index 5217920..60b69fb 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_service_async.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_service_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_GetService_async] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_service_sync.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_service_sync.py index c00ede5..230e93f 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_service_sync.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_service_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_GetService_sync] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_backups_async.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_backups_async.py index 7f252f9..7b88c87 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_backups_async.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_backups_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_ListBackups_async] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_backups_sync.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_backups_sync.py index 93c6ef7..cd6f465 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_backups_sync.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_backups_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_ListBackups_sync] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_metadata_imports_async.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_metadata_imports_async.py index 87db7ed..c8f4935 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_metadata_imports_async.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_metadata_imports_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_ListMetadataImports_async] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_metadata_imports_sync.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_metadata_imports_sync.py index b519864..ceb4ff2 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_metadata_imports_sync.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_metadata_imports_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_ListMetadataImports_sync] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_services_async.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_services_async.py index 595445f..5358cff 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_services_async.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_services_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_ListServices_async] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_services_sync.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_services_sync.py index 44c910b..33f4f1d 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_services_sync.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_services_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_ListServices_sync] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_restore_service_async.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_restore_service_async.py index b2694bf..ab29aa1 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_restore_service_async.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_restore_service_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_RestoreService_async] @@ -49,7 +49,7 @@ async def sample_restore_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_restore_service_sync.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_restore_service_sync.py index 43c9044..bab5c0c 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_restore_service_sync.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_restore_service_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_RestoreService_sync] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_metadata_import_async.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_metadata_import_async.py index 5597bc4..6aeece1 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_metadata_import_async.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_metadata_import_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_UpdateMetadataImport_async] @@ -47,7 +47,7 @@ async def sample_update_metadata_import(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_metadata_import_sync.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_metadata_import_sync.py index bdf992b..88eb58f 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_metadata_import_sync.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_metadata_import_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_UpdateMetadataImport_sync] diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_service_async.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_service_async.py index b8a9608..d715973 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_service_async.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_service_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_UpdateService_async] @@ -47,7 +47,7 @@ async def sample_update_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_service_sync.py b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_service_sync.py index 9f5bd93..70a37c2 100644 --- a/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_service_sync.py +++ b/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_service_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_UpdateService_sync] diff --git a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_create_backup_async.py b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_create_backup_async.py index 4358418..3275001 100644 --- a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_create_backup_async.py +++ b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_create_backup_async.py @@ -49,7 +49,7 @@ async def sample_create_backup(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_create_metadata_import_async.py b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_create_metadata_import_async.py index f71f7be..db6db57 100644 --- a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_create_metadata_import_async.py +++ b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_create_metadata_import_async.py @@ -49,7 +49,7 @@ async def sample_create_metadata_import(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_create_service_async.py b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_create_service_async.py index 1241f50..b241e92 100644 --- a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_create_service_async.py +++ b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_create_service_async.py @@ -49,7 +49,7 @@ async def sample_create_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_delete_backup_async.py b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_delete_backup_async.py index 99e756d..c8a7235 100644 --- a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_delete_backup_async.py +++ b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_delete_backup_async.py @@ -48,7 +48,7 @@ async def sample_delete_backup(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_delete_service_async.py b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_delete_service_async.py index 6b32e60..f71215a 100644 --- a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_delete_service_async.py +++ b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_delete_service_async.py @@ -48,7 +48,7 @@ async def sample_delete_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_export_metadata_async.py b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_export_metadata_async.py index 4113b76..87373a6 100644 --- a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_export_metadata_async.py +++ b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_export_metadata_async.py @@ -49,7 +49,7 @@ async def sample_export_metadata(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_create_federation_async.py b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_create_federation_async.py new file mode 100644 index 0000000..a6b8058 --- /dev/null +++ b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_create_federation_async.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1beta_generated_DataprocMetastoreFederation_CreateFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1beta + + +async def sample_create_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1beta.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END metastore_v1beta_generated_DataprocMetastoreFederation_CreateFederation_async] diff --git a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_create_federation_sync.py b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_create_federation_sync.py new file mode 100644 index 0000000..2ed2ace --- /dev/null +++ b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_create_federation_sync.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1beta_generated_DataprocMetastoreFederation_CreateFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1beta + + +def sample_create_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1beta.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END metastore_v1beta_generated_DataprocMetastoreFederation_CreateFederation_sync] diff --git a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_delete_federation_async.py b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_delete_federation_async.py new file mode 100644 index 0000000..1190fc2 --- /dev/null +++ b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_delete_federation_async.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1beta_generated_DataprocMetastoreFederation_DeleteFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1beta + + +async def sample_delete_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1beta.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END metastore_v1beta_generated_DataprocMetastoreFederation_DeleteFederation_async] diff --git a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_delete_federation_sync.py b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_delete_federation_sync.py new file mode 100644 index 0000000..8bd5c31 --- /dev/null +++ b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_delete_federation_sync.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1beta_generated_DataprocMetastoreFederation_DeleteFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1beta + + +def sample_delete_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1beta.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END metastore_v1beta_generated_DataprocMetastoreFederation_DeleteFederation_sync] diff --git a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_get_federation_async.py b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_get_federation_async.py new file mode 100644 index 0000000..c08cb2b --- /dev/null +++ b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_get_federation_async.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1beta_generated_DataprocMetastoreFederation_GetFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1beta + + +async def sample_get_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1beta.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = await client.get_federation(request=request) + + # Handle the response + print(response) + +# [END metastore_v1beta_generated_DataprocMetastoreFederation_GetFederation_async] diff --git a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_get_federation_sync.py b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_get_federation_sync.py new file mode 100644 index 0000000..d08b0db --- /dev/null +++ b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_get_federation_sync.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1beta_generated_DataprocMetastoreFederation_GetFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1beta + + +def sample_get_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1beta.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = client.get_federation(request=request) + + # Handle the response + print(response) + +# [END metastore_v1beta_generated_DataprocMetastoreFederation_GetFederation_sync] diff --git a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_list_federations_async.py b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_list_federations_async.py new file mode 100644 index 0000000..57dcf17 --- /dev/null +++ b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_list_federations_async.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListFederations +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1beta_generated_DataprocMetastoreFederation_ListFederations_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1beta + + +async def sample_list_federations(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1beta.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END metastore_v1beta_generated_DataprocMetastoreFederation_ListFederations_async] diff --git a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_list_federations_sync.py b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_list_federations_sync.py new file mode 100644 index 0000000..13224ec --- /dev/null +++ b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_list_federations_sync.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListFederations +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1beta_generated_DataprocMetastoreFederation_ListFederations_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1beta + + +def sample_list_federations(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1beta.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END metastore_v1beta_generated_DataprocMetastoreFederation_ListFederations_sync] diff --git a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_update_federation_async.py b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_update_federation_async.py new file mode 100644 index 0000000..1037451 --- /dev/null +++ b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_update_federation_async.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1beta_generated_DataprocMetastoreFederation_UpdateFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1beta + + +async def sample_update_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1beta.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END metastore_v1beta_generated_DataprocMetastoreFederation_UpdateFederation_async] diff --git a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_update_federation_sync.py b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_update_federation_sync.py new file mode 100644 index 0000000..06d2b0d --- /dev/null +++ b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_update_federation_sync.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1beta_generated_DataprocMetastoreFederation_UpdateFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1beta + + +def sample_update_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1beta.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END metastore_v1beta_generated_DataprocMetastoreFederation_UpdateFederation_sync] diff --git a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_restore_service_async.py b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_restore_service_async.py index e653756..94420c1 100644 --- a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_restore_service_async.py +++ b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_restore_service_async.py @@ -49,7 +49,7 @@ async def sample_restore_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_update_metadata_import_async.py b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_update_metadata_import_async.py index 35e611f..003b7cf 100644 --- a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_update_metadata_import_async.py +++ b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_update_metadata_import_async.py @@ -47,7 +47,7 @@ async def sample_update_metadata_import(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_update_service_async.py b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_update_service_async.py index 64971ec..98ecc0e 100644 --- a/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_update_service_async.py +++ b/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_update_service_async.py @@ -47,7 +47,7 @@ async def sample_update_service(): print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/samples/generated_samples/snippet_metadata_metastore_v1.json b/samples/generated_samples/snippet_metadata_google.cloud.metastore.v1.json similarity index 74% rename from samples/generated_samples/snippet_metadata_metastore_v1.json rename to samples/generated_samples/snippet_metadata_google.cloud.metastore.v1.json index cc0440d..f33dad5 100644 --- a/samples/generated_samples/snippet_metadata_metastore_v1.json +++ b/samples/generated_samples/snippet_metadata_google.cloud.metastore.v1.json @@ -7,9 +7,839 @@ } ], "language": "PYTHON", - "name": "google-cloud-metastore" + "name": "google-cloud-dataproc-metastore", + "version": "1.7.0" }, "snippets": [ + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationAsyncClient.create_federation", + "method": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation.CreateFederation", + "service": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "CreateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1.types.CreateFederationRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1.types.Federation" + }, + { + "name": "federation_id", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation_async.AsyncOperation", + "shortName": "create_federation" + }, + "description": "Sample for CreateFederation", + "file": "metastore_v1_generated_dataproc_metastore_federation_create_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1_generated_DataprocMetastoreFederation_CreateFederation_async", + "segments": [ + { + "end": 56, + "start": 27, + "type": "FULL" + }, + { + "end": 56, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 53, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 57, + "start": 54, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1_generated_dataproc_metastore_federation_create_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationClient.create_federation", + "method": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation.CreateFederation", + "service": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "CreateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1.types.CreateFederationRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1.types.Federation" + }, + { + "name": "federation_id", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation.Operation", + "shortName": "create_federation" + }, + "description": "Sample for CreateFederation", + "file": "metastore_v1_generated_dataproc_metastore_federation_create_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1_generated_DataprocMetastoreFederation_CreateFederation_sync", + "segments": [ + { + "end": 56, + "start": 27, + "type": "FULL" + }, + { + "end": 56, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 53, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 57, + "start": 54, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1_generated_dataproc_metastore_federation_create_federation_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationAsyncClient.delete_federation", + "method": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation.DeleteFederation", + "service": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "DeleteFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1.types.DeleteFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation_async.AsyncOperation", + "shortName": "delete_federation" + }, + "description": "Sample for DeleteFederation", + "file": "metastore_v1_generated_dataproc_metastore_federation_delete_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1_generated_DataprocMetastoreFederation_DeleteFederation_async", + "segments": [ + { + "end": 55, + "start": 27, + "type": "FULL" + }, + { + "end": 55, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 52, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 56, + "start": 53, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1_generated_dataproc_metastore_federation_delete_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationClient.delete_federation", + "method": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation.DeleteFederation", + "service": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "DeleteFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1.types.DeleteFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation.Operation", + "shortName": "delete_federation" + }, + "description": "Sample for DeleteFederation", + "file": "metastore_v1_generated_dataproc_metastore_federation_delete_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1_generated_DataprocMetastoreFederation_DeleteFederation_sync", + "segments": [ + { + "end": 55, + "start": 27, + "type": "FULL" + }, + { + "end": 55, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 52, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 56, + "start": 53, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1_generated_dataproc_metastore_federation_delete_federation_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationAsyncClient.get_federation", + "method": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation.GetFederation", + "service": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "GetFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1.types.GetFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1.types.Federation", + "shortName": "get_federation" + }, + "description": "Sample for GetFederation", + "file": "metastore_v1_generated_dataproc_metastore_federation_get_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1_generated_DataprocMetastoreFederation_GetFederation_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1_generated_dataproc_metastore_federation_get_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationClient.get_federation", + "method": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation.GetFederation", + "service": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "GetFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1.types.GetFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1.types.Federation", + "shortName": "get_federation" + }, + "description": "Sample for GetFederation", + "file": "metastore_v1_generated_dataproc_metastore_federation_get_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1_generated_DataprocMetastoreFederation_GetFederation_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1_generated_dataproc_metastore_federation_get_federation_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationAsyncClient.list_federations", + "method": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation.ListFederations", + "service": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "ListFederations" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1.types.ListFederationsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1.services.dataproc_metastore_federation.pagers.ListFederationsAsyncPager", + "shortName": "list_federations" + }, + "description": "Sample for ListFederations", + "file": "metastore_v1_generated_dataproc_metastore_federation_list_federations_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1_generated_DataprocMetastoreFederation_ListFederations_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1_generated_dataproc_metastore_federation_list_federations_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationClient.list_federations", + "method": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation.ListFederations", + "service": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "ListFederations" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1.types.ListFederationsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1.services.dataproc_metastore_federation.pagers.ListFederationsPager", + "shortName": "list_federations" + }, + "description": "Sample for ListFederations", + "file": "metastore_v1_generated_dataproc_metastore_federation_list_federations_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1_generated_DataprocMetastoreFederation_ListFederations_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1_generated_dataproc_metastore_federation_list_federations_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationAsyncClient.update_federation", + "method": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation.UpdateFederation", + "service": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "UpdateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1.types.UpdateFederationRequest" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1.types.Federation" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation_async.AsyncOperation", + "shortName": "update_federation" + }, + "description": "Sample for UpdateFederation", + "file": "metastore_v1_generated_dataproc_metastore_federation_update_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1_generated_DataprocMetastoreFederation_UpdateFederation_async", + "segments": [ + { + "end": 54, + "start": 27, + "type": "FULL" + }, + { + "end": 54, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 51, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 55, + "start": 52, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1_generated_dataproc_metastore_federation_update_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationClient.update_federation", + "method": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation.UpdateFederation", + "service": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "UpdateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1.types.UpdateFederationRequest" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1.types.Federation" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation.Operation", + "shortName": "update_federation" + }, + "description": "Sample for UpdateFederation", + "file": "metastore_v1_generated_dataproc_metastore_federation_update_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1_generated_DataprocMetastoreFederation_UpdateFederation_sync", + "segments": [ + { + "end": 54, + "start": 27, + "type": "FULL" + }, + { + "end": 54, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 51, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 55, + "start": 52, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1_generated_dataproc_metastore_federation_update_federation_sync.py" + }, { "canonical": true, "clientMethod": { diff --git a/samples/generated_samples/snippet_metadata_metastore_v1alpha.json b/samples/generated_samples/snippet_metadata_google.cloud.metastore.v1alpha.json similarity index 74% rename from samples/generated_samples/snippet_metadata_metastore_v1alpha.json rename to samples/generated_samples/snippet_metadata_google.cloud.metastore.v1alpha.json index 126c24b..694af43 100644 --- a/samples/generated_samples/snippet_metadata_metastore_v1alpha.json +++ b/samples/generated_samples/snippet_metadata_google.cloud.metastore.v1alpha.json @@ -7,9 +7,839 @@ } ], "language": "PYTHON", - "name": "google-cloud-metastore" + "name": "google-cloud-dataproc-metastore", + "version": "1.7.0" }, "snippets": [ + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationAsyncClient.create_federation", + "method": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation.CreateFederation", + "service": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "CreateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1alpha.types.CreateFederationRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1alpha.types.Federation" + }, + { + "name": "federation_id", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation_async.AsyncOperation", + "shortName": "create_federation" + }, + "description": "Sample for CreateFederation", + "file": "metastore_v1alpha_generated_dataproc_metastore_federation_create_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1alpha_generated_DataprocMetastoreFederation_CreateFederation_async", + "segments": [ + { + "end": 56, + "start": 27, + "type": "FULL" + }, + { + "end": 56, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 53, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 57, + "start": 54, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1alpha_generated_dataproc_metastore_federation_create_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationClient.create_federation", + "method": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation.CreateFederation", + "service": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "CreateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1alpha.types.CreateFederationRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1alpha.types.Federation" + }, + { + "name": "federation_id", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation.Operation", + "shortName": "create_federation" + }, + "description": "Sample for CreateFederation", + "file": "metastore_v1alpha_generated_dataproc_metastore_federation_create_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1alpha_generated_DataprocMetastoreFederation_CreateFederation_sync", + "segments": [ + { + "end": 56, + "start": 27, + "type": "FULL" + }, + { + "end": 56, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 53, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 57, + "start": 54, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1alpha_generated_dataproc_metastore_federation_create_federation_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationAsyncClient.delete_federation", + "method": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation.DeleteFederation", + "service": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "DeleteFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1alpha.types.DeleteFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation_async.AsyncOperation", + "shortName": "delete_federation" + }, + "description": "Sample for DeleteFederation", + "file": "metastore_v1alpha_generated_dataproc_metastore_federation_delete_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1alpha_generated_DataprocMetastoreFederation_DeleteFederation_async", + "segments": [ + { + "end": 55, + "start": 27, + "type": "FULL" + }, + { + "end": 55, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 52, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 56, + "start": 53, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1alpha_generated_dataproc_metastore_federation_delete_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationClient.delete_federation", + "method": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation.DeleteFederation", + "service": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "DeleteFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1alpha.types.DeleteFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation.Operation", + "shortName": "delete_federation" + }, + "description": "Sample for DeleteFederation", + "file": "metastore_v1alpha_generated_dataproc_metastore_federation_delete_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1alpha_generated_DataprocMetastoreFederation_DeleteFederation_sync", + "segments": [ + { + "end": 55, + "start": 27, + "type": "FULL" + }, + { + "end": 55, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 52, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 56, + "start": 53, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1alpha_generated_dataproc_metastore_federation_delete_federation_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationAsyncClient.get_federation", + "method": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation.GetFederation", + "service": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "GetFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1alpha.types.GetFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1alpha.types.Federation", + "shortName": "get_federation" + }, + "description": "Sample for GetFederation", + "file": "metastore_v1alpha_generated_dataproc_metastore_federation_get_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1alpha_generated_DataprocMetastoreFederation_GetFederation_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1alpha_generated_dataproc_metastore_federation_get_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationClient.get_federation", + "method": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation.GetFederation", + "service": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "GetFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1alpha.types.GetFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1alpha.types.Federation", + "shortName": "get_federation" + }, + "description": "Sample for GetFederation", + "file": "metastore_v1alpha_generated_dataproc_metastore_federation_get_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1alpha_generated_DataprocMetastoreFederation_GetFederation_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1alpha_generated_dataproc_metastore_federation_get_federation_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationAsyncClient.list_federations", + "method": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation.ListFederations", + "service": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "ListFederations" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1alpha.types.ListFederationsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1alpha.services.dataproc_metastore_federation.pagers.ListFederationsAsyncPager", + "shortName": "list_federations" + }, + "description": "Sample for ListFederations", + "file": "metastore_v1alpha_generated_dataproc_metastore_federation_list_federations_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1alpha_generated_DataprocMetastoreFederation_ListFederations_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1alpha_generated_dataproc_metastore_federation_list_federations_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationClient.list_federations", + "method": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation.ListFederations", + "service": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "ListFederations" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1alpha.types.ListFederationsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1alpha.services.dataproc_metastore_federation.pagers.ListFederationsPager", + "shortName": "list_federations" + }, + "description": "Sample for ListFederations", + "file": "metastore_v1alpha_generated_dataproc_metastore_federation_list_federations_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1alpha_generated_DataprocMetastoreFederation_ListFederations_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1alpha_generated_dataproc_metastore_federation_list_federations_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationAsyncClient.update_federation", + "method": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation.UpdateFederation", + "service": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "UpdateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1alpha.types.UpdateFederationRequest" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1alpha.types.Federation" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation_async.AsyncOperation", + "shortName": "update_federation" + }, + "description": "Sample for UpdateFederation", + "file": "metastore_v1alpha_generated_dataproc_metastore_federation_update_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1alpha_generated_DataprocMetastoreFederation_UpdateFederation_async", + "segments": [ + { + "end": 54, + "start": 27, + "type": "FULL" + }, + { + "end": 54, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 51, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 55, + "start": 52, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1alpha_generated_dataproc_metastore_federation_update_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationClient.update_federation", + "method": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation.UpdateFederation", + "service": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "UpdateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1alpha.types.UpdateFederationRequest" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1alpha.types.Federation" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation.Operation", + "shortName": "update_federation" + }, + "description": "Sample for UpdateFederation", + "file": "metastore_v1alpha_generated_dataproc_metastore_federation_update_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1alpha_generated_DataprocMetastoreFederation_UpdateFederation_sync", + "segments": [ + { + "end": 54, + "start": 27, + "type": "FULL" + }, + { + "end": 54, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 51, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 55, + "start": 52, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1alpha_generated_dataproc_metastore_federation_update_federation_sync.py" + }, { "canonical": true, "clientMethod": { diff --git a/samples/generated_samples/snippet_metadata_metastore_v1beta.json b/samples/generated_samples/snippet_metadata_google.cloud.metastore.v1beta.json similarity index 74% rename from samples/generated_samples/snippet_metadata_metastore_v1beta.json rename to samples/generated_samples/snippet_metadata_google.cloud.metastore.v1beta.json index 516c01e..895c35c 100644 --- a/samples/generated_samples/snippet_metadata_metastore_v1beta.json +++ b/samples/generated_samples/snippet_metadata_google.cloud.metastore.v1beta.json @@ -7,9 +7,839 @@ } ], "language": "PYTHON", - "name": "google-cloud-dataproc-metastore" + "name": "google-cloud-dataproc-metastore", + "version": "1.7.0" }, "snippets": [ + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationAsyncClient.create_federation", + "method": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation.CreateFederation", + "service": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "CreateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1beta.types.CreateFederationRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1beta.types.Federation" + }, + { + "name": "federation_id", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation_async.AsyncOperation", + "shortName": "create_federation" + }, + "description": "Sample for CreateFederation", + "file": "metastore_v1beta_generated_dataproc_metastore_federation_create_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1beta_generated_DataprocMetastoreFederation_CreateFederation_async", + "segments": [ + { + "end": 56, + "start": 27, + "type": "FULL" + }, + { + "end": 56, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 53, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 57, + "start": 54, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1beta_generated_dataproc_metastore_federation_create_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationClient.create_federation", + "method": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation.CreateFederation", + "service": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "CreateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1beta.types.CreateFederationRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1beta.types.Federation" + }, + { + "name": "federation_id", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation.Operation", + "shortName": "create_federation" + }, + "description": "Sample for CreateFederation", + "file": "metastore_v1beta_generated_dataproc_metastore_federation_create_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1beta_generated_DataprocMetastoreFederation_CreateFederation_sync", + "segments": [ + { + "end": 56, + "start": 27, + "type": "FULL" + }, + { + "end": 56, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 53, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 57, + "start": 54, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1beta_generated_dataproc_metastore_federation_create_federation_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationAsyncClient.delete_federation", + "method": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation.DeleteFederation", + "service": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "DeleteFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1beta.types.DeleteFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation_async.AsyncOperation", + "shortName": "delete_federation" + }, + "description": "Sample for DeleteFederation", + "file": "metastore_v1beta_generated_dataproc_metastore_federation_delete_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1beta_generated_DataprocMetastoreFederation_DeleteFederation_async", + "segments": [ + { + "end": 55, + "start": 27, + "type": "FULL" + }, + { + "end": 55, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 52, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 56, + "start": 53, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1beta_generated_dataproc_metastore_federation_delete_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationClient.delete_federation", + "method": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation.DeleteFederation", + "service": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "DeleteFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1beta.types.DeleteFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation.Operation", + "shortName": "delete_federation" + }, + "description": "Sample for DeleteFederation", + "file": "metastore_v1beta_generated_dataproc_metastore_federation_delete_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1beta_generated_DataprocMetastoreFederation_DeleteFederation_sync", + "segments": [ + { + "end": 55, + "start": 27, + "type": "FULL" + }, + { + "end": 55, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 52, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 56, + "start": 53, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1beta_generated_dataproc_metastore_federation_delete_federation_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationAsyncClient.get_federation", + "method": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation.GetFederation", + "service": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "GetFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1beta.types.GetFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1beta.types.Federation", + "shortName": "get_federation" + }, + "description": "Sample for GetFederation", + "file": "metastore_v1beta_generated_dataproc_metastore_federation_get_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1beta_generated_DataprocMetastoreFederation_GetFederation_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1beta_generated_dataproc_metastore_federation_get_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationClient.get_federation", + "method": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation.GetFederation", + "service": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "GetFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1beta.types.GetFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1beta.types.Federation", + "shortName": "get_federation" + }, + "description": "Sample for GetFederation", + "file": "metastore_v1beta_generated_dataproc_metastore_federation_get_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1beta_generated_DataprocMetastoreFederation_GetFederation_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1beta_generated_dataproc_metastore_federation_get_federation_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationAsyncClient.list_federations", + "method": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation.ListFederations", + "service": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "ListFederations" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1beta.types.ListFederationsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1beta.services.dataproc_metastore_federation.pagers.ListFederationsAsyncPager", + "shortName": "list_federations" + }, + "description": "Sample for ListFederations", + "file": "metastore_v1beta_generated_dataproc_metastore_federation_list_federations_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1beta_generated_DataprocMetastoreFederation_ListFederations_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1beta_generated_dataproc_metastore_federation_list_federations_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationClient.list_federations", + "method": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation.ListFederations", + "service": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "ListFederations" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1beta.types.ListFederationsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1beta.services.dataproc_metastore_federation.pagers.ListFederationsPager", + "shortName": "list_federations" + }, + "description": "Sample for ListFederations", + "file": "metastore_v1beta_generated_dataproc_metastore_federation_list_federations_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1beta_generated_DataprocMetastoreFederation_ListFederations_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1beta_generated_dataproc_metastore_federation_list_federations_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationAsyncClient.update_federation", + "method": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation.UpdateFederation", + "service": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "UpdateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1beta.types.UpdateFederationRequest" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1beta.types.Federation" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation_async.AsyncOperation", + "shortName": "update_federation" + }, + "description": "Sample for UpdateFederation", + "file": "metastore_v1beta_generated_dataproc_metastore_federation_update_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1beta_generated_DataprocMetastoreFederation_UpdateFederation_async", + "segments": [ + { + "end": 54, + "start": 27, + "type": "FULL" + }, + { + "end": 54, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 51, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 55, + "start": 52, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1beta_generated_dataproc_metastore_federation_update_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationClient.update_federation", + "method": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation.UpdateFederation", + "service": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "UpdateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1beta.types.UpdateFederationRequest" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1beta.types.Federation" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation.Operation", + "shortName": "update_federation" + }, + "description": "Sample for UpdateFederation", + "file": "metastore_v1beta_generated_dataproc_metastore_federation_update_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1beta_generated_DataprocMetastoreFederation_UpdateFederation_sync", + "segments": [ + { + "end": 54, + "start": 27, + "type": "FULL" + }, + { + "end": 54, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 51, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 55, + "start": 52, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1beta_generated_dataproc_metastore_federation_update_federation_sync.py" + }, { "canonical": true, "clientMethod": { diff --git a/scripts/fixup_metastore_v1_keywords.py b/scripts/fixup_metastore_v1_keywords.py index d73abae..cbca0a7 100644 --- a/scripts/fixup_metastore_v1_keywords.py +++ b/scripts/fixup_metastore_v1_keywords.py @@ -40,18 +40,23 @@ class metastoreCallTransformer(cst.CSTTransformer): CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { 'create_backup': ('parent', 'backup_id', 'backup', 'request_id', ), + 'create_federation': ('parent', 'federation_id', 'federation', 'request_id', ), 'create_metadata_import': ('parent', 'metadata_import_id', 'metadata_import', 'request_id', ), 'create_service': ('parent', 'service_id', 'service', 'request_id', ), 'delete_backup': ('name', 'request_id', ), + 'delete_federation': ('name', 'request_id', ), 'delete_service': ('name', 'request_id', ), 'export_metadata': ('service', 'destination_gcs_folder', 'request_id', 'database_dump_type', ), 'get_backup': ('name', ), + 'get_federation': ('name', ), 'get_metadata_import': ('name', ), 'get_service': ('name', ), 'list_backups': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), + 'list_federations': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), 'list_metadata_imports': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), 'list_services': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), 'restore_service': ('service', 'backup', 'restore_type', 'request_id', ), + 'update_federation': ('update_mask', 'federation', 'request_id', ), 'update_metadata_import': ('update_mask', 'metadata_import', 'request_id', ), 'update_service': ('update_mask', 'service', 'request_id', ), } diff --git a/scripts/fixup_metastore_v1alpha_keywords.py b/scripts/fixup_metastore_v1alpha_keywords.py index d73abae..cbca0a7 100644 --- a/scripts/fixup_metastore_v1alpha_keywords.py +++ b/scripts/fixup_metastore_v1alpha_keywords.py @@ -40,18 +40,23 @@ class metastoreCallTransformer(cst.CSTTransformer): CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { 'create_backup': ('parent', 'backup_id', 'backup', 'request_id', ), + 'create_federation': ('parent', 'federation_id', 'federation', 'request_id', ), 'create_metadata_import': ('parent', 'metadata_import_id', 'metadata_import', 'request_id', ), 'create_service': ('parent', 'service_id', 'service', 'request_id', ), 'delete_backup': ('name', 'request_id', ), + 'delete_federation': ('name', 'request_id', ), 'delete_service': ('name', 'request_id', ), 'export_metadata': ('service', 'destination_gcs_folder', 'request_id', 'database_dump_type', ), 'get_backup': ('name', ), + 'get_federation': ('name', ), 'get_metadata_import': ('name', ), 'get_service': ('name', ), 'list_backups': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), + 'list_federations': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), 'list_metadata_imports': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), 'list_services': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), 'restore_service': ('service', 'backup', 'restore_type', 'request_id', ), + 'update_federation': ('update_mask', 'federation', 'request_id', ), 'update_metadata_import': ('update_mask', 'metadata_import', 'request_id', ), 'update_service': ('update_mask', 'service', 'request_id', ), } diff --git a/scripts/fixup_metastore_v1beta_keywords.py b/scripts/fixup_metastore_v1beta_keywords.py index d73abae..cbca0a7 100644 --- a/scripts/fixup_metastore_v1beta_keywords.py +++ b/scripts/fixup_metastore_v1beta_keywords.py @@ -40,18 +40,23 @@ class metastoreCallTransformer(cst.CSTTransformer): CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { 'create_backup': ('parent', 'backup_id', 'backup', 'request_id', ), + 'create_federation': ('parent', 'federation_id', 'federation', 'request_id', ), 'create_metadata_import': ('parent', 'metadata_import_id', 'metadata_import', 'request_id', ), 'create_service': ('parent', 'service_id', 'service', 'request_id', ), 'delete_backup': ('name', 'request_id', ), + 'delete_federation': ('name', 'request_id', ), 'delete_service': ('name', 'request_id', ), 'export_metadata': ('service', 'destination_gcs_folder', 'request_id', 'database_dump_type', ), 'get_backup': ('name', ), + 'get_federation': ('name', ), 'get_metadata_import': ('name', ), 'get_service': ('name', ), 'list_backups': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), + 'list_federations': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), 'list_metadata_imports': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), 'list_services': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), 'restore_service': ('service', 'backup', 'restore_type', 'request_id', ), + 'update_federation': ('update_mask', 'federation', 'request_id', ), 'update_metadata_import': ('update_mask', 'metadata_import', 'request_id', ), 'update_service': ('update_mask', 'service', 'request_id', ), } diff --git a/setup.py b/setup.py index 1ff37ba..0c9f9e0 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- - -# Copyright 2020 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -14,22 +13,34 @@ # See the License for the specific language governing permissions and # limitations under the License. # - import io import os import setuptools # type: ignore +package_root = os.path.abspath(os.path.dirname(__file__)) + name = "google-cloud-dataproc-metastore" -version = "1.6.3" -description = "Dataproc Metastore API client library" -release_status = "Development Status :: 5 - Production/Stable" -url = "https://github.com/googleapis/python-dataproc-metastore" + + +description = "Google Cloud Dataproc Metastore API client library" + +version = {} +with open(os.path.join(package_root, "google/cloud/metastore/gapic_version.py")) as fp: + exec(fp.read(), version) +version = version["__version__"] + +if version[0] == "0": + release_status = "Development Status :: 4 - Beta" +else: + release_status = "Development Status :: 5 - Production/Stable" + dependencies = [ - "google-api-core[grpc] >= 1.32.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*", + "google-api-core[grpc] >= 1.34.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", "proto-plus >= 1.22.0, <2.0.0dev", "protobuf>=3.19.5,<5.0.0dev,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", ] +url = "https://github.com/googleapis/python-dataproc-metastore" package_root = os.path.abspath(os.path.dirname(__file__)) @@ -37,6 +48,16 @@ with io.open(readme_filename, encoding="utf-8") as readme_file: readme = readme_file.read() +packages = [ + package + for package in setuptools.PEP420PackageFinder.find() + if package.startswith("google") +] + +namespaces = ["google"] +if "google.cloud" in packages: + namespaces.append("google.cloud") + setuptools.setup( name=name, version=version, @@ -46,26 +67,24 @@ author_email="googleapis-packages@google.com", license="Apache 2.0", url=url, - packages=[ - package - for package in setuptools.PEP420PackageFinder.find() - if package.startswith("google") - ], - namespace_packages=("google", "google.cloud"), - platforms="Posix; MacOS X; Windows", - include_package_data=True, - install_requires=dependencies, - python_requires=">=3.7", classifiers=[ release_status, "Intended Audience :: Developers", - "Operating System :: OS Independent", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python", + "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", + "Operating System :: OS Independent", "Topic :: Internet", - "Topic :: Software Development :: Libraries :: Python Modules", ], + platforms="Posix; MacOS X; Windows", + packages=packages, + python_requires=">=3.7", + namespace_packages=namespaces, + install_requires=dependencies, + include_package_data=True, zip_safe=False, ) diff --git a/testing/constraints-3.10.txt b/testing/constraints-3.10.txt index e69de29..ed7f9ae 100644 --- a/testing/constraints-3.10.txt +++ b/testing/constraints-3.10.txt @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf diff --git a/testing/constraints-3.11.txt b/testing/constraints-3.11.txt index e69de29..ed7f9ae 100644 --- a/testing/constraints-3.11.txt +++ b/testing/constraints-3.11.txt @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf diff --git a/testing/constraints-3.7.txt b/testing/constraints-3.7.txt index a12652c..6c44adf 100644 --- a/testing/constraints-3.7.txt +++ b/testing/constraints-3.7.txt @@ -1,24 +1,9 @@ -# Copyright 2021 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. -# # This constraints file is used to check that lower bounds # are correct in setup.py -# List *all* library dependencies and extras in this file. +# List all library dependencies and extras in this file. # Pin the version to the lower bound. -# -# e.g., if setup.py has "foo >= 1.14.0, < 2.0.0dev", -# Then this file should have foo==1.14.0 -google-api-core==1.32.0 +# e.g., if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0dev", +# Then this file should have google-cloud-foo==1.14.0 +google-api-core==1.34.0 proto-plus==1.22.0 protobuf==3.19.5 diff --git a/testing/constraints-3.8.txt b/testing/constraints-3.8.txt index e69de29..ed7f9ae 100644 --- a/testing/constraints-3.8.txt +++ b/testing/constraints-3.8.txt @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf diff --git a/testing/constraints-3.9.txt b/testing/constraints-3.9.txt index e69de29..ed7f9ae 100644 --- a/testing/constraints-3.9.txt +++ b/testing/constraints-3.9.txt @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf diff --git a/tests/unit/gapic/metastore_v1/test_dataproc_metastore.py b/tests/unit/gapic/metastore_v1/test_dataproc_metastore.py index f85e6ec..f048a59 100644 --- a/tests/unit/gapic/metastore_v1/test_dataproc_metastore.py +++ b/tests/unit/gapic/metastore_v1/test_dataproc_metastore.py @@ -41,6 +41,7 @@ from google.auth.exceptions import MutualTLSChannelError from google.longrunning import operations_pb2 from google.oauth2 import service_account +from google.protobuf import empty_pb2 # type: ignore from google.protobuf import field_mask_pb2 # type: ignore from google.protobuf import timestamp_pb2 # type: ignore from google.protobuf import wrappers_pb2 # type: ignore @@ -1164,6 +1165,7 @@ def test_get_service(request_type, transport: str = "grpc"): tier=metastore.Service.Tier.DEVELOPER, uid="uid_value", release_channel=metastore.Service.ReleaseChannel.CANARY, + database_type=metastore.Service.DatabaseType.MYSQL, hive_metastore_config=metastore.HiveMetastoreConfig( version="version_value" ), @@ -1187,6 +1189,7 @@ def test_get_service(request_type, transport: str = "grpc"): assert response.tier == metastore.Service.Tier.DEVELOPER assert response.uid == "uid_value" assert response.release_channel == metastore.Service.ReleaseChannel.CANARY + assert response.database_type == metastore.Service.DatabaseType.MYSQL def test_get_service_empty_call(): @@ -1233,6 +1236,7 @@ async def test_get_service_async( tier=metastore.Service.Tier.DEVELOPER, uid="uid_value", release_channel=metastore.Service.ReleaseChannel.CANARY, + database_type=metastore.Service.DatabaseType.MYSQL, ) ) response = await client.get_service(request) @@ -1254,6 +1258,7 @@ async def test_get_service_async( assert response.tier == metastore.Service.Tier.DEVELOPER assert response.uid == "uid_value" assert response.release_channel == metastore.Service.ReleaseChannel.CANARY + assert response.database_type == metastore.Service.DatabaseType.MYSQL @pytest.mark.asyncio @@ -5570,8 +5575,34 @@ def test_parse_service_path(): assert expected == actual +def test_subnetwork_path(): + project = "whelk" + region = "octopus" + subnetwork = "oyster" + expected = "projects/{project}/regions/{region}/subnetworks/{subnetwork}".format( + project=project, + region=region, + subnetwork=subnetwork, + ) + actual = DataprocMetastoreClient.subnetwork_path(project, region, subnetwork) + assert expected == actual + + +def test_parse_subnetwork_path(): + expected = { + "project": "nudibranch", + "region": "cuttlefish", + "subnetwork": "mussel", + } + path = DataprocMetastoreClient.subnetwork_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreClient.parse_subnetwork_path(path) + assert expected == actual + + def test_common_billing_account_path(): - billing_account = "whelk" + billing_account = "winkle" expected = "billingAccounts/{billing_account}".format( billing_account=billing_account, ) @@ -5581,7 +5612,7 @@ def test_common_billing_account_path(): def test_parse_common_billing_account_path(): expected = { - "billing_account": "octopus", + "billing_account": "nautilus", } path = DataprocMetastoreClient.common_billing_account_path(**expected) @@ -5591,7 +5622,7 @@ def test_parse_common_billing_account_path(): def test_common_folder_path(): - folder = "oyster" + folder = "scallop" expected = "folders/{folder}".format( folder=folder, ) @@ -5601,7 +5632,7 @@ def test_common_folder_path(): def test_parse_common_folder_path(): expected = { - "folder": "nudibranch", + "folder": "abalone", } path = DataprocMetastoreClient.common_folder_path(**expected) @@ -5611,7 +5642,7 @@ def test_parse_common_folder_path(): def test_common_organization_path(): - organization = "cuttlefish" + organization = "squid" expected = "organizations/{organization}".format( organization=organization, ) @@ -5621,7 +5652,7 @@ def test_common_organization_path(): def test_parse_common_organization_path(): expected = { - "organization": "mussel", + "organization": "clam", } path = DataprocMetastoreClient.common_organization_path(**expected) @@ -5631,7 +5662,7 @@ def test_parse_common_organization_path(): def test_common_project_path(): - project = "winkle" + project = "whelk" expected = "projects/{project}".format( project=project, ) @@ -5641,7 +5672,7 @@ def test_common_project_path(): def test_parse_common_project_path(): expected = { - "project": "nautilus", + "project": "octopus", } path = DataprocMetastoreClient.common_project_path(**expected) @@ -5651,8 +5682,8 @@ def test_parse_common_project_path(): def test_common_location_path(): - project = "scallop" - location = "abalone" + project = "oyster" + location = "nudibranch" expected = "projects/{project}/locations/{location}".format( project=project, location=location, @@ -5663,8 +5694,8 @@ def test_common_location_path(): def test_parse_common_location_path(): expected = { - "project": "squid", - "location": "clam", + "project": "cuttlefish", + "location": "mussel", } path = DataprocMetastoreClient.common_location_path(**expected) diff --git a/tests/unit/gapic/metastore_v1/test_dataproc_metastore_federation.py b/tests/unit/gapic/metastore_v1/test_dataproc_metastore_federation.py new file mode 100644 index 0000000..a3ca18a --- /dev/null +++ b/tests/unit/gapic/metastore_v1/test_dataproc_metastore_federation.py @@ -0,0 +1,2931 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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 + +# try/except added for compatibility with python < 3.8 +try: + from unittest import mock + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER + import mock + +import math + +from google.api_core import ( + future, + gapic_v1, + grpc_helpers, + grpc_helpers_async, + operation, + operations_v1, + path_template, +) +from google.api_core import client_options +from google.api_core import exceptions as core_exceptions +from google.api_core import operation_async # type: ignore +import google.auth +from google.auth import credentials as ga_credentials +from google.auth.exceptions import MutualTLSChannelError +from google.longrunning import operations_pb2 +from google.oauth2 import service_account +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore +import grpc +from grpc.experimental import aio +from proto.marshal.rules import wrappers +from proto.marshal.rules.dates import DurationRule, TimestampRule +import pytest + +from google.cloud.metastore_v1.services.dataproc_metastore_federation import ( + DataprocMetastoreFederationAsyncClient, + DataprocMetastoreFederationClient, + pagers, + transports, +) +from google.cloud.metastore_v1.types import metastore, metastore_federation + + +def client_cert_source_callback(): + return b"cert bytes", b"key bytes" + + +# If default endpoint is localhost, then default mtls endpoint will be the same. +# This method modifies the default endpoint so the client can produce a different +# mtls endpoint for endpoint testing purposes. +def modify_default_endpoint(client): + return ( + "foo.googleapis.com" + if ("localhost" in client.DEFAULT_ENDPOINT) + else client.DEFAULT_ENDPOINT + ) + + +def test__get_default_mtls_endpoint(): + api_endpoint = "example.googleapis.com" + api_mtls_endpoint = "example.mtls.googleapis.com" + sandbox_endpoint = "example.sandbox.googleapis.com" + sandbox_mtls_endpoint = "example.mtls.sandbox.googleapis.com" + non_googleapi = "api.example.com" + + assert DataprocMetastoreFederationClient._get_default_mtls_endpoint(None) is None + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(api_endpoint) + == api_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(api_mtls_endpoint) + == api_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(sandbox_endpoint) + == sandbox_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint( + sandbox_mtls_endpoint + ) + == sandbox_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(non_googleapi) + == non_googleapi + ) + + +@pytest.mark.parametrize( + "client_class,transport_name", + [ + (DataprocMetastoreFederationClient, "grpc"), + (DataprocMetastoreFederationAsyncClient, "grpc_asyncio"), + ], +) +def test_dataproc_metastore_federation_client_from_service_account_info( + client_class, transport_name +): + creds = ga_credentials.AnonymousCredentials() + with mock.patch.object( + service_account.Credentials, "from_service_account_info" + ) as factory: + factory.return_value = creds + info = {"valid": True} + client = client_class.from_service_account_info(info, transport=transport_name) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == ("metastore.googleapis.com:443") + + +@pytest.mark.parametrize( + "transport_class,transport_name", + [ + (transports.DataprocMetastoreFederationGrpcTransport, "grpc"), + (transports.DataprocMetastoreFederationGrpcAsyncIOTransport, "grpc_asyncio"), + ], +) +def test_dataproc_metastore_federation_client_service_account_always_use_jwt( + transport_class, transport_name +): + with mock.patch.object( + service_account.Credentials, "with_always_use_jwt_access", create=True + ) as use_jwt: + creds = service_account.Credentials(None, None, None) + transport = transport_class(credentials=creds, always_use_jwt_access=True) + use_jwt.assert_called_once_with(True) + + with mock.patch.object( + service_account.Credentials, "with_always_use_jwt_access", create=True + ) as use_jwt: + creds = service_account.Credentials(None, None, None) + transport = transport_class(credentials=creds, always_use_jwt_access=False) + use_jwt.assert_not_called() + + +@pytest.mark.parametrize( + "client_class,transport_name", + [ + (DataprocMetastoreFederationClient, "grpc"), + (DataprocMetastoreFederationAsyncClient, "grpc_asyncio"), + ], +) +def test_dataproc_metastore_federation_client_from_service_account_file( + client_class, transport_name +): + creds = ga_credentials.AnonymousCredentials() + with mock.patch.object( + service_account.Credentials, "from_service_account_file" + ) as factory: + factory.return_value = creds + client = client_class.from_service_account_file( + "dummy/file/path.json", transport=transport_name + ) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + client = client_class.from_service_account_json( + "dummy/file/path.json", transport=transport_name + ) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == ("metastore.googleapis.com:443") + + +def test_dataproc_metastore_federation_client_get_transport_class(): + transport = DataprocMetastoreFederationClient.get_transport_class() + available_transports = [ + transports.DataprocMetastoreFederationGrpcTransport, + ] + assert transport in available_transports + + transport = DataprocMetastoreFederationClient.get_transport_class("grpc") + assert transport == transports.DataprocMetastoreFederationGrpcTransport + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +@mock.patch.object( + DataprocMetastoreFederationClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationClient), +) +@mock.patch.object( + DataprocMetastoreFederationAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationAsyncClient), +) +def test_dataproc_metastore_federation_client_client_options( + client_class, transport_class, transport_name +): + # Check that if channel is provided we won't create a new one. + with mock.patch.object( + DataprocMetastoreFederationClient, "get_transport_class" + ) as gtc: + transport = transport_class(credentials=ga_credentials.AnonymousCredentials()) + client = client_class(transport=transport) + gtc.assert_not_called() + + # Check that if channel is provided via str we will create a new one. + with mock.patch.object( + DataprocMetastoreFederationClient, "get_transport_class" + ) as gtc: + client = client_class(transport=transport_name) + gtc.assert_called() + + # Check the case api_endpoint is provided. + options = client_options.ClientOptions(api_endpoint="squid.clam.whelk") + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name, client_options=options) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_MTLS_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has + # unsupported value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): + with pytest.raises(MutualTLSChannelError): + client = client_class(transport=transport_name) + + # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"} + ): + with pytest.raises(ValueError): + client = client_class(transport=transport_name) + + # Check the case quota_project_id is provided + options = client_options.ClientOptions(quota_project_id="octopus") + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id="octopus", + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + # Check the case api_endpoint is provided + options = client_options.ClientOptions( + api_audience="https://language.googleapis.com" + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience="https://language.googleapis.com", + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,use_client_cert_env", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + "true", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + "true", + ), + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + "false", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + "false", + ), + ], +) +@mock.patch.object( + DataprocMetastoreFederationClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationClient), +) +@mock.patch.object( + DataprocMetastoreFederationAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationAsyncClient), +) +@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) +def test_dataproc_metastore_federation_client_mtls_env_auto( + client_class, transport_class, transport_name, use_client_cert_env +): + # This tests the endpoint autoswitch behavior. Endpoint is autoswitched to the default + # mtls endpoint, if GOOGLE_API_USE_CLIENT_CERTIFICATE is "true" and client cert exists. + + # Check the case client_cert_source is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + options = client_options.ClientOptions( + client_cert_source=client_cert_source_callback + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + + if use_client_cert_env == "false": + expected_client_cert_source = None + expected_host = client.DEFAULT_ENDPOINT + else: + expected_client_cert_source = client_cert_source_callback + expected_host = client.DEFAULT_MTLS_ENDPOINT + + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case ADC client cert is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + with mock.patch.object(transport_class, "__init__") as patched: + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, + ): + with mock.patch( + "google.auth.transport.mtls.default_client_cert_source", + return_value=client_cert_source_callback, + ): + if use_client_cert_env == "false": + expected_host = client.DEFAULT_ENDPOINT + expected_client_cert_source = None + else: + expected_host = client.DEFAULT_MTLS_ENDPOINT + expected_client_cert_source = client_cert_source_callback + + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case client_cert_source and ADC client cert are not provided. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + with mock.patch.object(transport_class, "__init__") as patched: + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=False, + ): + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize( + "client_class", + [DataprocMetastoreFederationClient, DataprocMetastoreFederationAsyncClient], +) +@mock.patch.object( + DataprocMetastoreFederationClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationClient), +) +@mock.patch.object( + DataprocMetastoreFederationAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationAsyncClient), +) +def test_dataproc_metastore_federation_client_get_mtls_endpoint_and_cert_source( + client_class, +): + mock_client_cert_source = mock.Mock() + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "true". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + mock_api_endpoint = "foo" + options = client_options.ClientOptions( + client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint + ) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source( + options + ) + assert api_endpoint == mock_api_endpoint + assert cert_source == mock_client_cert_source + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "false". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "false"}): + mock_client_cert_source = mock.Mock() + mock_api_endpoint = "foo" + options = client_options.ClientOptions( + client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint + ) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source( + options + ) + assert api_endpoint == mock_api_endpoint + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert doesn't exist. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=False, + ): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert exists. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, + ): + with mock.patch( + "google.auth.transport.mtls.default_client_cert_source", + return_value=mock_client_cert_source, + ): + ( + api_endpoint, + cert_source, + ) = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source == mock_client_cert_source + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +def test_dataproc_metastore_federation_client_client_options_scopes( + client_class, transport_class, transport_name +): + # Check the case scopes are provided. + options = client_options.ClientOptions( + scopes=["1", "2"], + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=["1", "2"], + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,grpc_helpers", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + grpc_helpers, + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + grpc_helpers_async, + ), + ], +) +def test_dataproc_metastore_federation_client_client_options_credentials_file( + client_class, transport_class, transport_name, grpc_helpers +): + # Check the case credentials file is provided. + options = client_options.ClientOptions(credentials_file="credentials.json") + + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +def test_dataproc_metastore_federation_client_client_options_from_dict(): + with mock.patch( + "google.cloud.metastore_v1.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationGrpcTransport.__init__" + ) as grpc_transport: + grpc_transport.return_value = None + client = DataprocMetastoreFederationClient( + client_options={"api_endpoint": "squid.clam.whelk"} + ) + grpc_transport.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,grpc_helpers", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + grpc_helpers, + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + grpc_helpers_async, + ), + ], +) +def test_dataproc_metastore_federation_client_create_channel_credentials_file( + client_class, transport_class, transport_name, grpc_helpers +): + # Check the case credentials file is provided. + options = client_options.ClientOptions(credentials_file="credentials.json") + + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # test that the credentials from file are saved and used as the credentials. + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel" + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + file_creds = ga_credentials.AnonymousCredentials() + load_creds.return_value = (file_creds, None) + adc.return_value = (creds, None) + client = client_class(client_options=options, transport=transport_name) + create_channel.assert_called_with( + "metastore.googleapis.com:443", + credentials=file_creds, + credentials_file=None, + quota_project_id=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=None, + default_host="metastore.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.ListFederationsRequest, + dict, + ], +) +def test_list_federations(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.ListFederationsResponse( + next_page_token="next_page_token_value", + unreachable=["unreachable_value"], + ) + response = client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.ListFederationsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListFederationsPager) + assert response.next_page_token == "next_page_token_value" + assert response.unreachable == ["unreachable_value"] + + +def test_list_federations_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + client.list_federations() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.ListFederationsRequest() + + +@pytest.mark.asyncio +async def test_list_federations_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.ListFederationsRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.ListFederationsResponse( + next_page_token="next_page_token_value", + unreachable=["unreachable_value"], + ) + ) + response = await client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.ListFederationsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListFederationsAsyncPager) + assert response.next_page_token == "next_page_token_value" + assert response.unreachable == ["unreachable_value"] + + +@pytest.mark.asyncio +async def test_list_federations_async_from_dict(): + await test_list_federations_async(request_type=dict) + + +def test_list_federations_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.ListFederationsRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + call.return_value = metastore_federation.ListFederationsResponse() + client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_list_federations_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.ListFederationsRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.ListFederationsResponse() + ) + await client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +def test_list_federations_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.ListFederationsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_federations( + parent="parent_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + + +def test_list_federations_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_federations( + metastore_federation.ListFederationsRequest(), + parent="parent_value", + ) + + +@pytest.mark.asyncio +async def test_list_federations_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.ListFederationsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.ListFederationsResponse() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_federations( + parent="parent_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_list_federations_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.list_federations( + metastore_federation.ListFederationsRequest(), + parent="parent_value", + ) + + +def test_list_federations_pager(transport_name: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + ) + pager = client.list_federations(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, metastore_federation.Federation) for i in results) + + +def test_list_federations_pages(transport_name: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + pages = list(client.list_federations(request={}).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.asyncio +async def test_list_federations_async_pager(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_federations), "__call__", new_callable=mock.AsyncMock + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_federations( + request={}, + ) + assert async_pager.next_page_token == "abc" + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, metastore_federation.Federation) for i in responses) + + +@pytest.mark.asyncio +async def test_list_federations_async_pages(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_federations), "__call__", new_callable=mock.AsyncMock + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in ( + await client.list_federations(request={}) + ).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.GetFederationRequest, + dict, + ], +) +def test_get_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.Federation( + name="name_value", + version="version_value", + endpoint_uri="endpoint_uri_value", + state=metastore_federation.Federation.State.CREATING, + state_message="state_message_value", + uid="uid_value", + ) + response = client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.GetFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, metastore_federation.Federation) + assert response.name == "name_value" + assert response.version == "version_value" + assert response.endpoint_uri == "endpoint_uri_value" + assert response.state == metastore_federation.Federation.State.CREATING + assert response.state_message == "state_message_value" + assert response.uid == "uid_value" + + +def test_get_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + client.get_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.GetFederationRequest() + + +@pytest.mark.asyncio +async def test_get_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.GetFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.Federation( + name="name_value", + version="version_value", + endpoint_uri="endpoint_uri_value", + state=metastore_federation.Federation.State.CREATING, + state_message="state_message_value", + uid="uid_value", + ) + ) + response = await client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.GetFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, metastore_federation.Federation) + assert response.name == "name_value" + assert response.version == "version_value" + assert response.endpoint_uri == "endpoint_uri_value" + assert response.state == metastore_federation.Federation.State.CREATING + assert response.state_message == "state_message_value" + assert response.uid == "uid_value" + + +@pytest.mark.asyncio +async def test_get_federation_async_from_dict(): + await test_get_federation_async(request_type=dict) + + +def test_get_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.GetFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + call.return_value = metastore_federation.Federation() + client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_get_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.GetFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.Federation() + ) + await client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +def test_get_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.Federation() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +def test_get_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_federation( + metastore_federation.GetFederationRequest(), + name="name_value", + ) + + +@pytest.mark.asyncio +async def test_get_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.Federation() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.Federation() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_get_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_federation( + metastore_federation.GetFederationRequest(), + name="name_value", + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.CreateFederationRequest, + dict, + ], +) +def test_create_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + response = client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.CreateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_create_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + client.create_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.CreateFederationRequest() + + +@pytest.mark.asyncio +async def test_create_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.CreateFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + response = await client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.CreateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_create_federation_async_from_dict(): + await test_create_federation_async(request_type=dict) + + +def test_create_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.CreateFederationRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + call.return_value = operations_pb2.Operation(name="operations/op") + client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_create_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.CreateFederationRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + await client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +def test_create_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_federation( + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].federation_id + mock_val = "federation_id_value" + assert arg == mock_val + + +def test_create_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_federation( + metastore_federation.CreateFederationRequest(), + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + +@pytest.mark.asyncio +async def test_create_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_federation( + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].federation_id + mock_val = "federation_id_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_create_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.create_federation( + metastore_federation.CreateFederationRequest(), + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.UpdateFederationRequest, + dict, + ], +) +def test_update_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + response = client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.UpdateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_update_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + client.update_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.UpdateFederationRequest() + + +@pytest.mark.asyncio +async def test_update_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.UpdateFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + response = await client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.UpdateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_update_federation_async_from_dict(): + await test_update_federation_async(request_type=dict) + + +def test_update_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.UpdateFederationRequest() + + request.federation.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + call.return_value = operations_pb2.Operation(name="operations/op") + client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "federation.name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_update_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.UpdateFederationRequest() + + request.federation.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + await client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "federation.name=name_value", + ) in kw["metadata"] + + +def test_update_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_federation( + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + assert arg == mock_val + + +def test_update_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_federation( + metastore_federation.UpdateFederationRequest(), + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + +@pytest.mark.asyncio +async def test_update_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_federation( + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_update_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_federation( + metastore_federation.UpdateFederationRequest(), + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.DeleteFederationRequest, + dict, + ], +) +def test_delete_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + response = client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.DeleteFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_delete_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + client.delete_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.DeleteFederationRequest() + + +@pytest.mark.asyncio +async def test_delete_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.DeleteFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + response = await client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.DeleteFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_delete_federation_async_from_dict(): + await test_delete_federation_async(request_type=dict) + + +def test_delete_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.DeleteFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + call.return_value = operations_pb2.Operation(name="operations/op") + client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_delete_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.DeleteFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + await client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +def test_delete_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.delete_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +def test_delete_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_federation( + metastore_federation.DeleteFederationRequest(), + name="name_value", + ) + + +@pytest.mark.asyncio +async def test_delete_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.delete_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_delete_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.delete_federation( + metastore_federation.DeleteFederationRequest(), + name="name_value", + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide an api_key and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options=options, + transport=transport, + ) + + # It is an error to provide an api_key and a credential. + options = mock.Mock() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options=options, credentials=ga_credentials.AnonymousCredentials() + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options={"scopes": ["1", "2"]}, + transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + client = DataprocMetastoreFederationClient(transport=transport) + assert client.transport is transport + + +def test_transport_get_channel(): + # A client may be instantiated with a custom transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + transport = transports.DataprocMetastoreFederationGrpcAsyncIOTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class() + adc.assert_called_once() + + +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + ], +) +def test_transport_kind(transport_name): + transport = DataprocMetastoreFederationClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + +def test_transport_grpc_default(): + # A client should use the gRPC transport by default. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert isinstance( + client.transport, + transports.DataprocMetastoreFederationGrpcTransport, + ) + + +def test_dataproc_metastore_federation_base_transport_error(): + # Passing both a credentials object and credentials_file should raise an error + with pytest.raises(core_exceptions.DuplicateCredentialArgs): + transport = transports.DataprocMetastoreFederationTransport( + credentials=ga_credentials.AnonymousCredentials(), + credentials_file="credentials.json", + ) + + +def test_dataproc_metastore_federation_base_transport(): + # Instantiate the base transport. + with mock.patch( + "google.cloud.metastore_v1.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationTransport.__init__" + ) as Transport: + Transport.return_value = None + transport = transports.DataprocMetastoreFederationTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Every method on the transport should just blindly + # raise NotImplementedError. + methods = ( + "list_federations", + "get_federation", + "create_federation", + "update_federation", + "delete_federation", + ) + for method in methods: + with pytest.raises(NotImplementedError): + getattr(transport, method)(request=object()) + + with pytest.raises(NotImplementedError): + transport.close() + + # Additionally, the LRO client (a property) should + # also raise NotImplementedError + with pytest.raises(NotImplementedError): + transport.operations_client + + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + + +def test_dataproc_metastore_federation_base_transport_with_credentials_file(): + # Instantiate the base transport with a credentials file + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch( + "google.cloud.metastore_v1.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.DataprocMetastoreFederationTransport( + credentials_file="credentials.json", + quota_project_id="octopus", + ) + load_creds.assert_called_once_with( + "credentials.json", + scopes=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", + ) + + +def test_dataproc_metastore_federation_base_transport_with_adc(): + # Test the default credentials are used if credentials and credentials_file are None. + with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch( + "google.cloud.metastore_v1.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.DataprocMetastoreFederationTransport() + adc.assert_called_once() + + +def test_dataproc_metastore_federation_auth_adc(): + # If no credentials are provided, we should use ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + DataprocMetastoreFederationClient() + adc.assert_called_once_with( + scopes=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id=None, + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_auth_adc(transport_class): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + adc.assert_called_once_with( + scopes=["1", "2"], + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_auth_gdch_credentials(transport_class): + host = "https://language.com" + api_audience_tests = [None, "https://language2.com"] + api_audience_expect = [host, "https://language2.com"] + for t, e in zip(api_audience_tests, api_audience_expect): + with mock.patch.object(google.auth, "default", autospec=True) as adc: + gdch_mock = mock.MagicMock() + type(gdch_mock).with_gdch_audience = mock.PropertyMock( + return_value=gdch_mock + ) + adc.return_value = (gdch_mock, None) + transport_class(host=host, api_audience=t) + gdch_mock.with_gdch_audience.assert_called_once_with(e) + + +@pytest.mark.parametrize( + "transport_class,grpc_helpers", + [ + (transports.DataprocMetastoreFederationGrpcTransport, grpc_helpers), + ( + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + grpc_helpers_async, + ), + ], +) +def test_dataproc_metastore_federation_transport_create_channel( + transport_class, grpc_helpers +): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel", autospec=True + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + adc.return_value = (creds, None) + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + + create_channel.assert_called_with( + "metastore.googleapis.com:443", + credentials=creds, + credentials_file=None, + quota_project_id="octopus", + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=["1", "2"], + default_host="metastore.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_grpc_transport_client_cert_source_for_mtls( + transport_class, +): + cred = ga_credentials.AnonymousCredentials() + + # Check ssl_channel_credentials is used if provided. + with mock.patch.object(transport_class, "create_channel") as mock_create_channel: + mock_ssl_channel_creds = mock.Mock() + transport_class( + host="squid.clam.whelk", + credentials=cred, + ssl_channel_credentials=mock_ssl_channel_creds, + ) + mock_create_channel.assert_called_once_with( + "squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_channel_creds, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls + # is used. + with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()): + with mock.patch("grpc.ssl_channel_credentials") as mock_ssl_cred: + transport_class( + credentials=cred, + client_cert_source_for_mtls=client_cert_source_callback, + ) + expected_cert, expected_key = client_cert_source_callback() + mock_ssl_cred.assert_called_once_with( + certificate_chain=expected_cert, private_key=expected_key + ) + + +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + "grpc_asyncio", + ], +) +def test_dataproc_metastore_federation_host_no_port(transport_name): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="metastore.googleapis.com" + ), + transport=transport_name, + ) + assert client.transport._host == ("metastore.googleapis.com:443") + + +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + "grpc_asyncio", + ], +) +def test_dataproc_metastore_federation_host_with_port(transport_name): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="metastore.googleapis.com:8000" + ), + transport=transport_name, + ) + assert client.transport._host == ("metastore.googleapis.com:8000") + + +def test_dataproc_metastore_federation_grpc_transport_channel(): + channel = grpc.secure_channel("http://localhost/", grpc.local_channel_credentials()) + + # Check that channel is used if provided. + transport = transports.DataprocMetastoreFederationGrpcTransport( + host="squid.clam.whelk", + channel=channel, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert transport._ssl_channel_credentials == None + + +def test_dataproc_metastore_federation_grpc_asyncio_transport_channel(): + channel = aio.secure_channel("http://localhost/", grpc.local_channel_credentials()) + + # Check that channel is used if provided. + transport = transports.DataprocMetastoreFederationGrpcAsyncIOTransport( + host="squid.clam.whelk", + channel=channel, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert transport._ssl_channel_credentials == None + + +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_channel_mtls_with_client_cert_source( + transport_class, +): + with mock.patch( + "grpc.ssl_channel_credentials", autospec=True + ) as grpc_ssl_channel_cred: + with mock.patch.object( + transport_class, "create_channel" + ) as grpc_create_channel: + mock_ssl_cred = mock.Mock() + grpc_ssl_channel_cred.return_value = mock_ssl_cred + + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + cred = ga_credentials.AnonymousCredentials() + with pytest.warns(DeprecationWarning): + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (cred, None) + transport = transport_class( + host="squid.clam.whelk", + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=client_cert_source_callback, + ) + adc.assert_called_once() + + grpc_ssl_channel_cred.assert_called_once_with( + certificate_chain=b"cert bytes", private_key=b"key bytes" + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + assert transport.grpc_channel == mock_grpc_channel + assert transport._ssl_channel_credentials == mock_ssl_cred + + +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_channel_mtls_with_adc(transport_class): + mock_ssl_cred = mock.Mock() + with mock.patch.multiple( + "google.auth.transport.grpc.SslCredentials", + __init__=mock.Mock(return_value=None), + ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), + ): + with mock.patch.object( + transport_class, "create_channel" + ) as grpc_create_channel: + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + mock_cred = mock.Mock() + + with pytest.warns(DeprecationWarning): + transport = transport_class( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=None, + ) + + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + assert transport.grpc_channel == mock_grpc_channel + + +def test_dataproc_metastore_federation_grpc_lro_client(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + transport = client.transport + + # Ensure that we have a api-core operations client. + assert isinstance( + transport.operations_client, + operations_v1.OperationsClient, + ) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +def test_dataproc_metastore_federation_grpc_lro_async_client(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", + ) + transport = client.transport + + # Ensure that we have a api-core operations client. + assert isinstance( + transport.operations_client, + operations_v1.OperationsAsyncClient, + ) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +def test_federation_path(): + project = "squid" + location = "clam" + federation = "whelk" + expected = ( + "projects/{project}/locations/{location}/federations/{federation}".format( + project=project, + location=location, + federation=federation, + ) + ) + actual = DataprocMetastoreFederationClient.federation_path( + project, location, federation + ) + assert expected == actual + + +def test_parse_federation_path(): + expected = { + "project": "octopus", + "location": "oyster", + "federation": "nudibranch", + } + path = DataprocMetastoreFederationClient.federation_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_federation_path(path) + assert expected == actual + + +def test_common_billing_account_path(): + billing_account = "cuttlefish" + expected = "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + actual = DataprocMetastoreFederationClient.common_billing_account_path( + billing_account + ) + assert expected == actual + + +def test_parse_common_billing_account_path(): + expected = { + "billing_account": "mussel", + } + path = DataprocMetastoreFederationClient.common_billing_account_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_billing_account_path(path) + assert expected == actual + + +def test_common_folder_path(): + folder = "winkle" + expected = "folders/{folder}".format( + folder=folder, + ) + actual = DataprocMetastoreFederationClient.common_folder_path(folder) + assert expected == actual + + +def test_parse_common_folder_path(): + expected = { + "folder": "nautilus", + } + path = DataprocMetastoreFederationClient.common_folder_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_folder_path(path) + assert expected == actual + + +def test_common_organization_path(): + organization = "scallop" + expected = "organizations/{organization}".format( + organization=organization, + ) + actual = DataprocMetastoreFederationClient.common_organization_path(organization) + assert expected == actual + + +def test_parse_common_organization_path(): + expected = { + "organization": "abalone", + } + path = DataprocMetastoreFederationClient.common_organization_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_organization_path(path) + assert expected == actual + + +def test_common_project_path(): + project = "squid" + expected = "projects/{project}".format( + project=project, + ) + actual = DataprocMetastoreFederationClient.common_project_path(project) + assert expected == actual + + +def test_parse_common_project_path(): + expected = { + "project": "clam", + } + path = DataprocMetastoreFederationClient.common_project_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_project_path(path) + assert expected == actual + + +def test_common_location_path(): + project = "whelk" + location = "octopus" + expected = "projects/{project}/locations/{location}".format( + project=project, + location=location, + ) + actual = DataprocMetastoreFederationClient.common_location_path(project, location) + assert expected == actual + + +def test_parse_common_location_path(): + expected = { + "project": "oyster", + "location": "nudibranch", + } + path = DataprocMetastoreFederationClient.common_location_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_location_path(path) + assert expected == actual + + +def test_client_with_default_client_info(): + client_info = gapic_v1.client_info.ClientInfo() + + with mock.patch.object( + transports.DataprocMetastoreFederationTransport, "_prep_wrapped_messages" + ) as prep: + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, + ) + prep.assert_called_once_with(client_info) + + with mock.patch.object( + transports.DataprocMetastoreFederationTransport, "_prep_wrapped_messages" + ) as prep: + transport_class = DataprocMetastoreFederationClient.get_transport_class() + transport = transport_class( + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, + ) + prep.assert_called_once_with(client_info) + + +@pytest.mark.asyncio +async def test_transport_close_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", + ) + with mock.patch.object( + type(getattr(client.transport, "grpc_channel")), "close" + ) as close: + async with client: + close.assert_not_called() + close.assert_called_once() + + +def test_transport_close(): + transports = { + "grpc": "_grpc_channel", + } + + for transport, close_name in transports.items(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport + ) + with mock.patch.object( + type(getattr(client.transport, close_name)), "close" + ) as close: + with client: + close.assert_not_called() + close.assert_called_once() + + +def test_client_ctx(): + transports = [ + "grpc", + ] + for transport in transports: + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport + ) + # Test client calls underlying transport. + with mock.patch.object(type(client.transport), "close") as close: + close.assert_not_called() + with client: + pass + close.assert_called() + + +@pytest.mark.parametrize( + "client_class,transport_class", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ), + ], +) +def test_api_key_credentials(client_class, transport_class): + with mock.patch.object( + google.auth._default, "get_api_key_credentials", create=True + ) as get_api_key_credentials: + mock_cred = mock.Mock() + get_api_key_credentials.return_value = mock_cred + options = client_options.ClientOptions() + options.api_key = "api_key" + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options) + patched.assert_called_once_with( + credentials=mock_cred, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) diff --git a/tests/unit/gapic/metastore_v1alpha/test_dataproc_metastore.py b/tests/unit/gapic/metastore_v1alpha/test_dataproc_metastore.py index 3d06b20..7e436f6 100644 --- a/tests/unit/gapic/metastore_v1alpha/test_dataproc_metastore.py +++ b/tests/unit/gapic/metastore_v1alpha/test_dataproc_metastore.py @@ -41,6 +41,7 @@ from google.auth.exceptions import MutualTLSChannelError from google.longrunning import operations_pb2 from google.oauth2 import service_account +from google.protobuf import empty_pb2 # type: ignore from google.protobuf import field_mask_pb2 # type: ignore from google.protobuf import timestamp_pb2 # type: ignore from google.protobuf import wrappers_pb2 # type: ignore diff --git a/tests/unit/gapic/metastore_v1alpha/test_dataproc_metastore_federation.py b/tests/unit/gapic/metastore_v1alpha/test_dataproc_metastore_federation.py new file mode 100644 index 0000000..0e72458 --- /dev/null +++ b/tests/unit/gapic/metastore_v1alpha/test_dataproc_metastore_federation.py @@ -0,0 +1,2931 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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 + +# try/except added for compatibility with python < 3.8 +try: + from unittest import mock + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER + import mock + +import math + +from google.api_core import ( + future, + gapic_v1, + grpc_helpers, + grpc_helpers_async, + operation, + operations_v1, + path_template, +) +from google.api_core import client_options +from google.api_core import exceptions as core_exceptions +from google.api_core import operation_async # type: ignore +import google.auth +from google.auth import credentials as ga_credentials +from google.auth.exceptions import MutualTLSChannelError +from google.longrunning import operations_pb2 +from google.oauth2 import service_account +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore +import grpc +from grpc.experimental import aio +from proto.marshal.rules import wrappers +from proto.marshal.rules.dates import DurationRule, TimestampRule +import pytest + +from google.cloud.metastore_v1alpha.services.dataproc_metastore_federation import ( + DataprocMetastoreFederationAsyncClient, + DataprocMetastoreFederationClient, + pagers, + transports, +) +from google.cloud.metastore_v1alpha.types import metastore, metastore_federation + + +def client_cert_source_callback(): + return b"cert bytes", b"key bytes" + + +# If default endpoint is localhost, then default mtls endpoint will be the same. +# This method modifies the default endpoint so the client can produce a different +# mtls endpoint for endpoint testing purposes. +def modify_default_endpoint(client): + return ( + "foo.googleapis.com" + if ("localhost" in client.DEFAULT_ENDPOINT) + else client.DEFAULT_ENDPOINT + ) + + +def test__get_default_mtls_endpoint(): + api_endpoint = "example.googleapis.com" + api_mtls_endpoint = "example.mtls.googleapis.com" + sandbox_endpoint = "example.sandbox.googleapis.com" + sandbox_mtls_endpoint = "example.mtls.sandbox.googleapis.com" + non_googleapi = "api.example.com" + + assert DataprocMetastoreFederationClient._get_default_mtls_endpoint(None) is None + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(api_endpoint) + == api_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(api_mtls_endpoint) + == api_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(sandbox_endpoint) + == sandbox_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint( + sandbox_mtls_endpoint + ) + == sandbox_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(non_googleapi) + == non_googleapi + ) + + +@pytest.mark.parametrize( + "client_class,transport_name", + [ + (DataprocMetastoreFederationClient, "grpc"), + (DataprocMetastoreFederationAsyncClient, "grpc_asyncio"), + ], +) +def test_dataproc_metastore_federation_client_from_service_account_info( + client_class, transport_name +): + creds = ga_credentials.AnonymousCredentials() + with mock.patch.object( + service_account.Credentials, "from_service_account_info" + ) as factory: + factory.return_value = creds + info = {"valid": True} + client = client_class.from_service_account_info(info, transport=transport_name) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == ("metastore.googleapis.com:443") + + +@pytest.mark.parametrize( + "transport_class,transport_name", + [ + (transports.DataprocMetastoreFederationGrpcTransport, "grpc"), + (transports.DataprocMetastoreFederationGrpcAsyncIOTransport, "grpc_asyncio"), + ], +) +def test_dataproc_metastore_federation_client_service_account_always_use_jwt( + transport_class, transport_name +): + with mock.patch.object( + service_account.Credentials, "with_always_use_jwt_access", create=True + ) as use_jwt: + creds = service_account.Credentials(None, None, None) + transport = transport_class(credentials=creds, always_use_jwt_access=True) + use_jwt.assert_called_once_with(True) + + with mock.patch.object( + service_account.Credentials, "with_always_use_jwt_access", create=True + ) as use_jwt: + creds = service_account.Credentials(None, None, None) + transport = transport_class(credentials=creds, always_use_jwt_access=False) + use_jwt.assert_not_called() + + +@pytest.mark.parametrize( + "client_class,transport_name", + [ + (DataprocMetastoreFederationClient, "grpc"), + (DataprocMetastoreFederationAsyncClient, "grpc_asyncio"), + ], +) +def test_dataproc_metastore_federation_client_from_service_account_file( + client_class, transport_name +): + creds = ga_credentials.AnonymousCredentials() + with mock.patch.object( + service_account.Credentials, "from_service_account_file" + ) as factory: + factory.return_value = creds + client = client_class.from_service_account_file( + "dummy/file/path.json", transport=transport_name + ) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + client = client_class.from_service_account_json( + "dummy/file/path.json", transport=transport_name + ) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == ("metastore.googleapis.com:443") + + +def test_dataproc_metastore_federation_client_get_transport_class(): + transport = DataprocMetastoreFederationClient.get_transport_class() + available_transports = [ + transports.DataprocMetastoreFederationGrpcTransport, + ] + assert transport in available_transports + + transport = DataprocMetastoreFederationClient.get_transport_class("grpc") + assert transport == transports.DataprocMetastoreFederationGrpcTransport + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +@mock.patch.object( + DataprocMetastoreFederationClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationClient), +) +@mock.patch.object( + DataprocMetastoreFederationAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationAsyncClient), +) +def test_dataproc_metastore_federation_client_client_options( + client_class, transport_class, transport_name +): + # Check that if channel is provided we won't create a new one. + with mock.patch.object( + DataprocMetastoreFederationClient, "get_transport_class" + ) as gtc: + transport = transport_class(credentials=ga_credentials.AnonymousCredentials()) + client = client_class(transport=transport) + gtc.assert_not_called() + + # Check that if channel is provided via str we will create a new one. + with mock.patch.object( + DataprocMetastoreFederationClient, "get_transport_class" + ) as gtc: + client = client_class(transport=transport_name) + gtc.assert_called() + + # Check the case api_endpoint is provided. + options = client_options.ClientOptions(api_endpoint="squid.clam.whelk") + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name, client_options=options) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_MTLS_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has + # unsupported value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): + with pytest.raises(MutualTLSChannelError): + client = client_class(transport=transport_name) + + # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"} + ): + with pytest.raises(ValueError): + client = client_class(transport=transport_name) + + # Check the case quota_project_id is provided + options = client_options.ClientOptions(quota_project_id="octopus") + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id="octopus", + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + # Check the case api_endpoint is provided + options = client_options.ClientOptions( + api_audience="https://language.googleapis.com" + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience="https://language.googleapis.com", + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,use_client_cert_env", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + "true", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + "true", + ), + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + "false", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + "false", + ), + ], +) +@mock.patch.object( + DataprocMetastoreFederationClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationClient), +) +@mock.patch.object( + DataprocMetastoreFederationAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationAsyncClient), +) +@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) +def test_dataproc_metastore_federation_client_mtls_env_auto( + client_class, transport_class, transport_name, use_client_cert_env +): + # This tests the endpoint autoswitch behavior. Endpoint is autoswitched to the default + # mtls endpoint, if GOOGLE_API_USE_CLIENT_CERTIFICATE is "true" and client cert exists. + + # Check the case client_cert_source is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + options = client_options.ClientOptions( + client_cert_source=client_cert_source_callback + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + + if use_client_cert_env == "false": + expected_client_cert_source = None + expected_host = client.DEFAULT_ENDPOINT + else: + expected_client_cert_source = client_cert_source_callback + expected_host = client.DEFAULT_MTLS_ENDPOINT + + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case ADC client cert is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + with mock.patch.object(transport_class, "__init__") as patched: + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, + ): + with mock.patch( + "google.auth.transport.mtls.default_client_cert_source", + return_value=client_cert_source_callback, + ): + if use_client_cert_env == "false": + expected_host = client.DEFAULT_ENDPOINT + expected_client_cert_source = None + else: + expected_host = client.DEFAULT_MTLS_ENDPOINT + expected_client_cert_source = client_cert_source_callback + + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case client_cert_source and ADC client cert are not provided. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + with mock.patch.object(transport_class, "__init__") as patched: + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=False, + ): + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize( + "client_class", + [DataprocMetastoreFederationClient, DataprocMetastoreFederationAsyncClient], +) +@mock.patch.object( + DataprocMetastoreFederationClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationClient), +) +@mock.patch.object( + DataprocMetastoreFederationAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationAsyncClient), +) +def test_dataproc_metastore_federation_client_get_mtls_endpoint_and_cert_source( + client_class, +): + mock_client_cert_source = mock.Mock() + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "true". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + mock_api_endpoint = "foo" + options = client_options.ClientOptions( + client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint + ) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source( + options + ) + assert api_endpoint == mock_api_endpoint + assert cert_source == mock_client_cert_source + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "false". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "false"}): + mock_client_cert_source = mock.Mock() + mock_api_endpoint = "foo" + options = client_options.ClientOptions( + client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint + ) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source( + options + ) + assert api_endpoint == mock_api_endpoint + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert doesn't exist. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=False, + ): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert exists. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, + ): + with mock.patch( + "google.auth.transport.mtls.default_client_cert_source", + return_value=mock_client_cert_source, + ): + ( + api_endpoint, + cert_source, + ) = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source == mock_client_cert_source + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +def test_dataproc_metastore_federation_client_client_options_scopes( + client_class, transport_class, transport_name +): + # Check the case scopes are provided. + options = client_options.ClientOptions( + scopes=["1", "2"], + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=["1", "2"], + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,grpc_helpers", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + grpc_helpers, + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + grpc_helpers_async, + ), + ], +) +def test_dataproc_metastore_federation_client_client_options_credentials_file( + client_class, transport_class, transport_name, grpc_helpers +): + # Check the case credentials file is provided. + options = client_options.ClientOptions(credentials_file="credentials.json") + + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +def test_dataproc_metastore_federation_client_client_options_from_dict(): + with mock.patch( + "google.cloud.metastore_v1alpha.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationGrpcTransport.__init__" + ) as grpc_transport: + grpc_transport.return_value = None + client = DataprocMetastoreFederationClient( + client_options={"api_endpoint": "squid.clam.whelk"} + ) + grpc_transport.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,grpc_helpers", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + grpc_helpers, + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + grpc_helpers_async, + ), + ], +) +def test_dataproc_metastore_federation_client_create_channel_credentials_file( + client_class, transport_class, transport_name, grpc_helpers +): + # Check the case credentials file is provided. + options = client_options.ClientOptions(credentials_file="credentials.json") + + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # test that the credentials from file are saved and used as the credentials. + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel" + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + file_creds = ga_credentials.AnonymousCredentials() + load_creds.return_value = (file_creds, None) + adc.return_value = (creds, None) + client = client_class(client_options=options, transport=transport_name) + create_channel.assert_called_with( + "metastore.googleapis.com:443", + credentials=file_creds, + credentials_file=None, + quota_project_id=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=None, + default_host="metastore.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.ListFederationsRequest, + dict, + ], +) +def test_list_federations(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.ListFederationsResponse( + next_page_token="next_page_token_value", + unreachable=["unreachable_value"], + ) + response = client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.ListFederationsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListFederationsPager) + assert response.next_page_token == "next_page_token_value" + assert response.unreachable == ["unreachable_value"] + + +def test_list_federations_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + client.list_federations() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.ListFederationsRequest() + + +@pytest.mark.asyncio +async def test_list_federations_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.ListFederationsRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.ListFederationsResponse( + next_page_token="next_page_token_value", + unreachable=["unreachable_value"], + ) + ) + response = await client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.ListFederationsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListFederationsAsyncPager) + assert response.next_page_token == "next_page_token_value" + assert response.unreachable == ["unreachable_value"] + + +@pytest.mark.asyncio +async def test_list_federations_async_from_dict(): + await test_list_federations_async(request_type=dict) + + +def test_list_federations_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.ListFederationsRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + call.return_value = metastore_federation.ListFederationsResponse() + client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_list_federations_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.ListFederationsRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.ListFederationsResponse() + ) + await client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +def test_list_federations_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.ListFederationsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_federations( + parent="parent_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + + +def test_list_federations_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_federations( + metastore_federation.ListFederationsRequest(), + parent="parent_value", + ) + + +@pytest.mark.asyncio +async def test_list_federations_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.ListFederationsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.ListFederationsResponse() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_federations( + parent="parent_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_list_federations_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.list_federations( + metastore_federation.ListFederationsRequest(), + parent="parent_value", + ) + + +def test_list_federations_pager(transport_name: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + ) + pager = client.list_federations(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, metastore_federation.Federation) for i in results) + + +def test_list_federations_pages(transport_name: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + pages = list(client.list_federations(request={}).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.asyncio +async def test_list_federations_async_pager(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_federations), "__call__", new_callable=mock.AsyncMock + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_federations( + request={}, + ) + assert async_pager.next_page_token == "abc" + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, metastore_federation.Federation) for i in responses) + + +@pytest.mark.asyncio +async def test_list_federations_async_pages(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_federations), "__call__", new_callable=mock.AsyncMock + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in ( + await client.list_federations(request={}) + ).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.GetFederationRequest, + dict, + ], +) +def test_get_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.Federation( + name="name_value", + version="version_value", + endpoint_uri="endpoint_uri_value", + state=metastore_federation.Federation.State.CREATING, + state_message="state_message_value", + uid="uid_value", + ) + response = client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.GetFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, metastore_federation.Federation) + assert response.name == "name_value" + assert response.version == "version_value" + assert response.endpoint_uri == "endpoint_uri_value" + assert response.state == metastore_federation.Federation.State.CREATING + assert response.state_message == "state_message_value" + assert response.uid == "uid_value" + + +def test_get_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + client.get_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.GetFederationRequest() + + +@pytest.mark.asyncio +async def test_get_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.GetFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.Federation( + name="name_value", + version="version_value", + endpoint_uri="endpoint_uri_value", + state=metastore_federation.Federation.State.CREATING, + state_message="state_message_value", + uid="uid_value", + ) + ) + response = await client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.GetFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, metastore_federation.Federation) + assert response.name == "name_value" + assert response.version == "version_value" + assert response.endpoint_uri == "endpoint_uri_value" + assert response.state == metastore_federation.Federation.State.CREATING + assert response.state_message == "state_message_value" + assert response.uid == "uid_value" + + +@pytest.mark.asyncio +async def test_get_federation_async_from_dict(): + await test_get_federation_async(request_type=dict) + + +def test_get_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.GetFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + call.return_value = metastore_federation.Federation() + client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_get_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.GetFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.Federation() + ) + await client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +def test_get_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.Federation() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +def test_get_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_federation( + metastore_federation.GetFederationRequest(), + name="name_value", + ) + + +@pytest.mark.asyncio +async def test_get_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.Federation() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.Federation() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_get_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_federation( + metastore_federation.GetFederationRequest(), + name="name_value", + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.CreateFederationRequest, + dict, + ], +) +def test_create_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + response = client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.CreateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_create_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + client.create_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.CreateFederationRequest() + + +@pytest.mark.asyncio +async def test_create_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.CreateFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + response = await client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.CreateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_create_federation_async_from_dict(): + await test_create_federation_async(request_type=dict) + + +def test_create_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.CreateFederationRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + call.return_value = operations_pb2.Operation(name="operations/op") + client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_create_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.CreateFederationRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + await client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +def test_create_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_federation( + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].federation_id + mock_val = "federation_id_value" + assert arg == mock_val + + +def test_create_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_federation( + metastore_federation.CreateFederationRequest(), + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + +@pytest.mark.asyncio +async def test_create_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_federation( + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].federation_id + mock_val = "federation_id_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_create_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.create_federation( + metastore_federation.CreateFederationRequest(), + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.UpdateFederationRequest, + dict, + ], +) +def test_update_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + response = client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.UpdateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_update_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + client.update_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.UpdateFederationRequest() + + +@pytest.mark.asyncio +async def test_update_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.UpdateFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + response = await client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.UpdateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_update_federation_async_from_dict(): + await test_update_federation_async(request_type=dict) + + +def test_update_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.UpdateFederationRequest() + + request.federation.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + call.return_value = operations_pb2.Operation(name="operations/op") + client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "federation.name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_update_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.UpdateFederationRequest() + + request.federation.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + await client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "federation.name=name_value", + ) in kw["metadata"] + + +def test_update_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_federation( + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + assert arg == mock_val + + +def test_update_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_federation( + metastore_federation.UpdateFederationRequest(), + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + +@pytest.mark.asyncio +async def test_update_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_federation( + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_update_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_federation( + metastore_federation.UpdateFederationRequest(), + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.DeleteFederationRequest, + dict, + ], +) +def test_delete_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + response = client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.DeleteFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_delete_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + client.delete_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.DeleteFederationRequest() + + +@pytest.mark.asyncio +async def test_delete_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.DeleteFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + response = await client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.DeleteFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_delete_federation_async_from_dict(): + await test_delete_federation_async(request_type=dict) + + +def test_delete_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.DeleteFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + call.return_value = operations_pb2.Operation(name="operations/op") + client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_delete_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.DeleteFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + await client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +def test_delete_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.delete_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +def test_delete_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_federation( + metastore_federation.DeleteFederationRequest(), + name="name_value", + ) + + +@pytest.mark.asyncio +async def test_delete_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.delete_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_delete_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.delete_federation( + metastore_federation.DeleteFederationRequest(), + name="name_value", + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide an api_key and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options=options, + transport=transport, + ) + + # It is an error to provide an api_key and a credential. + options = mock.Mock() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options=options, credentials=ga_credentials.AnonymousCredentials() + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options={"scopes": ["1", "2"]}, + transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + client = DataprocMetastoreFederationClient(transport=transport) + assert client.transport is transport + + +def test_transport_get_channel(): + # A client may be instantiated with a custom transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + transport = transports.DataprocMetastoreFederationGrpcAsyncIOTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class() + adc.assert_called_once() + + +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + ], +) +def test_transport_kind(transport_name): + transport = DataprocMetastoreFederationClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + +def test_transport_grpc_default(): + # A client should use the gRPC transport by default. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert isinstance( + client.transport, + transports.DataprocMetastoreFederationGrpcTransport, + ) + + +def test_dataproc_metastore_federation_base_transport_error(): + # Passing both a credentials object and credentials_file should raise an error + with pytest.raises(core_exceptions.DuplicateCredentialArgs): + transport = transports.DataprocMetastoreFederationTransport( + credentials=ga_credentials.AnonymousCredentials(), + credentials_file="credentials.json", + ) + + +def test_dataproc_metastore_federation_base_transport(): + # Instantiate the base transport. + with mock.patch( + "google.cloud.metastore_v1alpha.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationTransport.__init__" + ) as Transport: + Transport.return_value = None + transport = transports.DataprocMetastoreFederationTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Every method on the transport should just blindly + # raise NotImplementedError. + methods = ( + "list_federations", + "get_federation", + "create_federation", + "update_federation", + "delete_federation", + ) + for method in methods: + with pytest.raises(NotImplementedError): + getattr(transport, method)(request=object()) + + with pytest.raises(NotImplementedError): + transport.close() + + # Additionally, the LRO client (a property) should + # also raise NotImplementedError + with pytest.raises(NotImplementedError): + transport.operations_client + + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + + +def test_dataproc_metastore_federation_base_transport_with_credentials_file(): + # Instantiate the base transport with a credentials file + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch( + "google.cloud.metastore_v1alpha.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.DataprocMetastoreFederationTransport( + credentials_file="credentials.json", + quota_project_id="octopus", + ) + load_creds.assert_called_once_with( + "credentials.json", + scopes=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", + ) + + +def test_dataproc_metastore_federation_base_transport_with_adc(): + # Test the default credentials are used if credentials and credentials_file are None. + with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch( + "google.cloud.metastore_v1alpha.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.DataprocMetastoreFederationTransport() + adc.assert_called_once() + + +def test_dataproc_metastore_federation_auth_adc(): + # If no credentials are provided, we should use ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + DataprocMetastoreFederationClient() + adc.assert_called_once_with( + scopes=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id=None, + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_auth_adc(transport_class): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + adc.assert_called_once_with( + scopes=["1", "2"], + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_auth_gdch_credentials(transport_class): + host = "https://language.com" + api_audience_tests = [None, "https://language2.com"] + api_audience_expect = [host, "https://language2.com"] + for t, e in zip(api_audience_tests, api_audience_expect): + with mock.patch.object(google.auth, "default", autospec=True) as adc: + gdch_mock = mock.MagicMock() + type(gdch_mock).with_gdch_audience = mock.PropertyMock( + return_value=gdch_mock + ) + adc.return_value = (gdch_mock, None) + transport_class(host=host, api_audience=t) + gdch_mock.with_gdch_audience.assert_called_once_with(e) + + +@pytest.mark.parametrize( + "transport_class,grpc_helpers", + [ + (transports.DataprocMetastoreFederationGrpcTransport, grpc_helpers), + ( + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + grpc_helpers_async, + ), + ], +) +def test_dataproc_metastore_federation_transport_create_channel( + transport_class, grpc_helpers +): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel", autospec=True + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + adc.return_value = (creds, None) + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + + create_channel.assert_called_with( + "metastore.googleapis.com:443", + credentials=creds, + credentials_file=None, + quota_project_id="octopus", + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=["1", "2"], + default_host="metastore.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_grpc_transport_client_cert_source_for_mtls( + transport_class, +): + cred = ga_credentials.AnonymousCredentials() + + # Check ssl_channel_credentials is used if provided. + with mock.patch.object(transport_class, "create_channel") as mock_create_channel: + mock_ssl_channel_creds = mock.Mock() + transport_class( + host="squid.clam.whelk", + credentials=cred, + ssl_channel_credentials=mock_ssl_channel_creds, + ) + mock_create_channel.assert_called_once_with( + "squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_channel_creds, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls + # is used. + with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()): + with mock.patch("grpc.ssl_channel_credentials") as mock_ssl_cred: + transport_class( + credentials=cred, + client_cert_source_for_mtls=client_cert_source_callback, + ) + expected_cert, expected_key = client_cert_source_callback() + mock_ssl_cred.assert_called_once_with( + certificate_chain=expected_cert, private_key=expected_key + ) + + +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + "grpc_asyncio", + ], +) +def test_dataproc_metastore_federation_host_no_port(transport_name): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="metastore.googleapis.com" + ), + transport=transport_name, + ) + assert client.transport._host == ("metastore.googleapis.com:443") + + +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + "grpc_asyncio", + ], +) +def test_dataproc_metastore_federation_host_with_port(transport_name): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="metastore.googleapis.com:8000" + ), + transport=transport_name, + ) + assert client.transport._host == ("metastore.googleapis.com:8000") + + +def test_dataproc_metastore_federation_grpc_transport_channel(): + channel = grpc.secure_channel("http://localhost/", grpc.local_channel_credentials()) + + # Check that channel is used if provided. + transport = transports.DataprocMetastoreFederationGrpcTransport( + host="squid.clam.whelk", + channel=channel, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert transport._ssl_channel_credentials == None + + +def test_dataproc_metastore_federation_grpc_asyncio_transport_channel(): + channel = aio.secure_channel("http://localhost/", grpc.local_channel_credentials()) + + # Check that channel is used if provided. + transport = transports.DataprocMetastoreFederationGrpcAsyncIOTransport( + host="squid.clam.whelk", + channel=channel, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert transport._ssl_channel_credentials == None + + +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_channel_mtls_with_client_cert_source( + transport_class, +): + with mock.patch( + "grpc.ssl_channel_credentials", autospec=True + ) as grpc_ssl_channel_cred: + with mock.patch.object( + transport_class, "create_channel" + ) as grpc_create_channel: + mock_ssl_cred = mock.Mock() + grpc_ssl_channel_cred.return_value = mock_ssl_cred + + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + cred = ga_credentials.AnonymousCredentials() + with pytest.warns(DeprecationWarning): + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (cred, None) + transport = transport_class( + host="squid.clam.whelk", + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=client_cert_source_callback, + ) + adc.assert_called_once() + + grpc_ssl_channel_cred.assert_called_once_with( + certificate_chain=b"cert bytes", private_key=b"key bytes" + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + assert transport.grpc_channel == mock_grpc_channel + assert transport._ssl_channel_credentials == mock_ssl_cred + + +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_channel_mtls_with_adc(transport_class): + mock_ssl_cred = mock.Mock() + with mock.patch.multiple( + "google.auth.transport.grpc.SslCredentials", + __init__=mock.Mock(return_value=None), + ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), + ): + with mock.patch.object( + transport_class, "create_channel" + ) as grpc_create_channel: + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + mock_cred = mock.Mock() + + with pytest.warns(DeprecationWarning): + transport = transport_class( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=None, + ) + + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + assert transport.grpc_channel == mock_grpc_channel + + +def test_dataproc_metastore_federation_grpc_lro_client(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + transport = client.transport + + # Ensure that we have a api-core operations client. + assert isinstance( + transport.operations_client, + operations_v1.OperationsClient, + ) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +def test_dataproc_metastore_federation_grpc_lro_async_client(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", + ) + transport = client.transport + + # Ensure that we have a api-core operations client. + assert isinstance( + transport.operations_client, + operations_v1.OperationsAsyncClient, + ) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +def test_federation_path(): + project = "squid" + location = "clam" + federation = "whelk" + expected = ( + "projects/{project}/locations/{location}/federations/{federation}".format( + project=project, + location=location, + federation=federation, + ) + ) + actual = DataprocMetastoreFederationClient.federation_path( + project, location, federation + ) + assert expected == actual + + +def test_parse_federation_path(): + expected = { + "project": "octopus", + "location": "oyster", + "federation": "nudibranch", + } + path = DataprocMetastoreFederationClient.federation_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_federation_path(path) + assert expected == actual + + +def test_common_billing_account_path(): + billing_account = "cuttlefish" + expected = "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + actual = DataprocMetastoreFederationClient.common_billing_account_path( + billing_account + ) + assert expected == actual + + +def test_parse_common_billing_account_path(): + expected = { + "billing_account": "mussel", + } + path = DataprocMetastoreFederationClient.common_billing_account_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_billing_account_path(path) + assert expected == actual + + +def test_common_folder_path(): + folder = "winkle" + expected = "folders/{folder}".format( + folder=folder, + ) + actual = DataprocMetastoreFederationClient.common_folder_path(folder) + assert expected == actual + + +def test_parse_common_folder_path(): + expected = { + "folder": "nautilus", + } + path = DataprocMetastoreFederationClient.common_folder_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_folder_path(path) + assert expected == actual + + +def test_common_organization_path(): + organization = "scallop" + expected = "organizations/{organization}".format( + organization=organization, + ) + actual = DataprocMetastoreFederationClient.common_organization_path(organization) + assert expected == actual + + +def test_parse_common_organization_path(): + expected = { + "organization": "abalone", + } + path = DataprocMetastoreFederationClient.common_organization_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_organization_path(path) + assert expected == actual + + +def test_common_project_path(): + project = "squid" + expected = "projects/{project}".format( + project=project, + ) + actual = DataprocMetastoreFederationClient.common_project_path(project) + assert expected == actual + + +def test_parse_common_project_path(): + expected = { + "project": "clam", + } + path = DataprocMetastoreFederationClient.common_project_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_project_path(path) + assert expected == actual + + +def test_common_location_path(): + project = "whelk" + location = "octopus" + expected = "projects/{project}/locations/{location}".format( + project=project, + location=location, + ) + actual = DataprocMetastoreFederationClient.common_location_path(project, location) + assert expected == actual + + +def test_parse_common_location_path(): + expected = { + "project": "oyster", + "location": "nudibranch", + } + path = DataprocMetastoreFederationClient.common_location_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_location_path(path) + assert expected == actual + + +def test_client_with_default_client_info(): + client_info = gapic_v1.client_info.ClientInfo() + + with mock.patch.object( + transports.DataprocMetastoreFederationTransport, "_prep_wrapped_messages" + ) as prep: + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, + ) + prep.assert_called_once_with(client_info) + + with mock.patch.object( + transports.DataprocMetastoreFederationTransport, "_prep_wrapped_messages" + ) as prep: + transport_class = DataprocMetastoreFederationClient.get_transport_class() + transport = transport_class( + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, + ) + prep.assert_called_once_with(client_info) + + +@pytest.mark.asyncio +async def test_transport_close_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", + ) + with mock.patch.object( + type(getattr(client.transport, "grpc_channel")), "close" + ) as close: + async with client: + close.assert_not_called() + close.assert_called_once() + + +def test_transport_close(): + transports = { + "grpc": "_grpc_channel", + } + + for transport, close_name in transports.items(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport + ) + with mock.patch.object( + type(getattr(client.transport, close_name)), "close" + ) as close: + with client: + close.assert_not_called() + close.assert_called_once() + + +def test_client_ctx(): + transports = [ + "grpc", + ] + for transport in transports: + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport + ) + # Test client calls underlying transport. + with mock.patch.object(type(client.transport), "close") as close: + close.assert_not_called() + with client: + pass + close.assert_called() + + +@pytest.mark.parametrize( + "client_class,transport_class", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ), + ], +) +def test_api_key_credentials(client_class, transport_class): + with mock.patch.object( + google.auth._default, "get_api_key_credentials", create=True + ) as get_api_key_credentials: + mock_cred = mock.Mock() + get_api_key_credentials.return_value = mock_cred + options = client_options.ClientOptions() + options.api_key = "api_key" + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options) + patched.assert_called_once_with( + credentials=mock_cred, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) diff --git a/tests/unit/gapic/metastore_v1beta/test_dataproc_metastore.py b/tests/unit/gapic/metastore_v1beta/test_dataproc_metastore.py index 69f10b0..28fb38c 100644 --- a/tests/unit/gapic/metastore_v1beta/test_dataproc_metastore.py +++ b/tests/unit/gapic/metastore_v1beta/test_dataproc_metastore.py @@ -41,6 +41,7 @@ from google.auth.exceptions import MutualTLSChannelError from google.longrunning import operations_pb2 from google.oauth2 import service_account +from google.protobuf import empty_pb2 # type: ignore from google.protobuf import field_mask_pb2 # type: ignore from google.protobuf import timestamp_pb2 # type: ignore from google.protobuf import wrappers_pb2 # type: ignore @@ -1164,6 +1165,7 @@ def test_get_service(request_type, transport: str = "grpc"): tier=metastore.Service.Tier.DEVELOPER, uid="uid_value", release_channel=metastore.Service.ReleaseChannel.CANARY, + database_type=metastore.Service.DatabaseType.MYSQL, hive_metastore_config=metastore.HiveMetastoreConfig( version="version_value" ), @@ -1187,6 +1189,7 @@ def test_get_service(request_type, transport: str = "grpc"): assert response.tier == metastore.Service.Tier.DEVELOPER assert response.uid == "uid_value" assert response.release_channel == metastore.Service.ReleaseChannel.CANARY + assert response.database_type == metastore.Service.DatabaseType.MYSQL def test_get_service_empty_call(): @@ -1233,6 +1236,7 @@ async def test_get_service_async( tier=metastore.Service.Tier.DEVELOPER, uid="uid_value", release_channel=metastore.Service.ReleaseChannel.CANARY, + database_type=metastore.Service.DatabaseType.MYSQL, ) ) response = await client.get_service(request) @@ -1254,6 +1258,7 @@ async def test_get_service_async( assert response.tier == metastore.Service.Tier.DEVELOPER assert response.uid == "uid_value" assert response.release_channel == metastore.Service.ReleaseChannel.CANARY + assert response.database_type == metastore.Service.DatabaseType.MYSQL @pytest.mark.asyncio @@ -4237,6 +4242,7 @@ def test_get_backup(request_type, transport: str = "grpc"): name="name_value", state=metastore.Backup.State.CREATING, description="description_value", + restoring_services=["restoring_services_value"], ) response = client.get_backup(request) @@ -4250,6 +4256,7 @@ def test_get_backup(request_type, transport: str = "grpc"): assert response.name == "name_value" assert response.state == metastore.Backup.State.CREATING assert response.description == "description_value" + assert response.restoring_services == ["restoring_services_value"] def test_get_backup_empty_call(): @@ -4289,6 +4296,7 @@ async def test_get_backup_async( name="name_value", state=metastore.Backup.State.CREATING, description="description_value", + restoring_services=["restoring_services_value"], ) ) response = await client.get_backup(request) @@ -4303,6 +4311,7 @@ async def test_get_backup_async( assert response.name == "name_value" assert response.state == metastore.Backup.State.CREATING assert response.description == "description_value" + assert response.restoring_services == ["restoring_services_value"] @pytest.mark.asyncio @@ -5486,11 +5495,37 @@ def test_parse_backup_path(): assert expected == actual -def test_metadata_import_path(): +def test_lake_path(): project = "winkle" location = "nautilus" - service = "scallop" - metadata_import = "abalone" + lake = "scallop" + expected = "projects/{project}/locations/{location}/lakes/{lake}".format( + project=project, + location=location, + lake=lake, + ) + actual = DataprocMetastoreClient.lake_path(project, location, lake) + assert expected == actual + + +def test_parse_lake_path(): + expected = { + "project": "abalone", + "location": "squid", + "lake": "clam", + } + path = DataprocMetastoreClient.lake_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreClient.parse_lake_path(path) + assert expected == actual + + +def test_metadata_import_path(): + project = "whelk" + location = "octopus" + service = "oyster" + metadata_import = "nudibranch" expected = "projects/{project}/locations/{location}/services/{service}/metadataImports/{metadata_import}".format( project=project, location=location, @@ -5505,10 +5540,10 @@ def test_metadata_import_path(): def test_parse_metadata_import_path(): expected = { - "project": "squid", - "location": "clam", - "service": "whelk", - "metadata_import": "octopus", + "project": "cuttlefish", + "location": "mussel", + "service": "winkle", + "metadata_import": "nautilus", } path = DataprocMetastoreClient.metadata_import_path(**expected) @@ -5518,8 +5553,8 @@ def test_parse_metadata_import_path(): def test_network_path(): - project = "oyster" - network = "nudibranch" + project = "scallop" + network = "abalone" expected = "projects/{project}/global/networks/{network}".format( project=project, network=network, @@ -5530,8 +5565,8 @@ def test_network_path(): def test_parse_network_path(): expected = { - "project": "cuttlefish", - "network": "mussel", + "project": "squid", + "network": "clam", } path = DataprocMetastoreClient.network_path(**expected) @@ -5541,9 +5576,9 @@ def test_parse_network_path(): def test_service_path(): - project = "winkle" - location = "nautilus" - service = "scallop" + project = "whelk" + location = "octopus" + service = "oyster" expected = "projects/{project}/locations/{location}/services/{service}".format( project=project, location=location, @@ -5555,9 +5590,9 @@ def test_service_path(): def test_parse_service_path(): expected = { - "project": "abalone", - "location": "squid", - "service": "clam", + "project": "nudibranch", + "location": "cuttlefish", + "service": "mussel", } path = DataprocMetastoreClient.service_path(**expected) @@ -5566,6 +5601,32 @@ def test_parse_service_path(): assert expected == actual +def test_subnetwork_path(): + project = "winkle" + region = "nautilus" + subnetwork = "scallop" + expected = "projects/{project}/regions/{region}/subnetworks/{subnetwork}".format( + project=project, + region=region, + subnetwork=subnetwork, + ) + actual = DataprocMetastoreClient.subnetwork_path(project, region, subnetwork) + assert expected == actual + + +def test_parse_subnetwork_path(): + expected = { + "project": "abalone", + "region": "squid", + "subnetwork": "clam", + } + path = DataprocMetastoreClient.subnetwork_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreClient.parse_subnetwork_path(path) + assert expected == actual + + def test_common_billing_account_path(): billing_account = "whelk" expected = "billingAccounts/{billing_account}".format( diff --git a/tests/unit/gapic/metastore_v1beta/test_dataproc_metastore_federation.py b/tests/unit/gapic/metastore_v1beta/test_dataproc_metastore_federation.py new file mode 100644 index 0000000..5270c2a --- /dev/null +++ b/tests/unit/gapic/metastore_v1beta/test_dataproc_metastore_federation.py @@ -0,0 +1,2931 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 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 + +# try/except added for compatibility with python < 3.8 +try: + from unittest import mock + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER + import mock + +import math + +from google.api_core import ( + future, + gapic_v1, + grpc_helpers, + grpc_helpers_async, + operation, + operations_v1, + path_template, +) +from google.api_core import client_options +from google.api_core import exceptions as core_exceptions +from google.api_core import operation_async # type: ignore +import google.auth +from google.auth import credentials as ga_credentials +from google.auth.exceptions import MutualTLSChannelError +from google.longrunning import operations_pb2 +from google.oauth2 import service_account +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore +import grpc +from grpc.experimental import aio +from proto.marshal.rules import wrappers +from proto.marshal.rules.dates import DurationRule, TimestampRule +import pytest + +from google.cloud.metastore_v1beta.services.dataproc_metastore_federation import ( + DataprocMetastoreFederationAsyncClient, + DataprocMetastoreFederationClient, + pagers, + transports, +) +from google.cloud.metastore_v1beta.types import metastore, metastore_federation + + +def client_cert_source_callback(): + return b"cert bytes", b"key bytes" + + +# If default endpoint is localhost, then default mtls endpoint will be the same. +# This method modifies the default endpoint so the client can produce a different +# mtls endpoint for endpoint testing purposes. +def modify_default_endpoint(client): + return ( + "foo.googleapis.com" + if ("localhost" in client.DEFAULT_ENDPOINT) + else client.DEFAULT_ENDPOINT + ) + + +def test__get_default_mtls_endpoint(): + api_endpoint = "example.googleapis.com" + api_mtls_endpoint = "example.mtls.googleapis.com" + sandbox_endpoint = "example.sandbox.googleapis.com" + sandbox_mtls_endpoint = "example.mtls.sandbox.googleapis.com" + non_googleapi = "api.example.com" + + assert DataprocMetastoreFederationClient._get_default_mtls_endpoint(None) is None + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(api_endpoint) + == api_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(api_mtls_endpoint) + == api_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(sandbox_endpoint) + == sandbox_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint( + sandbox_mtls_endpoint + ) + == sandbox_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(non_googleapi) + == non_googleapi + ) + + +@pytest.mark.parametrize( + "client_class,transport_name", + [ + (DataprocMetastoreFederationClient, "grpc"), + (DataprocMetastoreFederationAsyncClient, "grpc_asyncio"), + ], +) +def test_dataproc_metastore_federation_client_from_service_account_info( + client_class, transport_name +): + creds = ga_credentials.AnonymousCredentials() + with mock.patch.object( + service_account.Credentials, "from_service_account_info" + ) as factory: + factory.return_value = creds + info = {"valid": True} + client = client_class.from_service_account_info(info, transport=transport_name) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == ("metastore.googleapis.com:443") + + +@pytest.mark.parametrize( + "transport_class,transport_name", + [ + (transports.DataprocMetastoreFederationGrpcTransport, "grpc"), + (transports.DataprocMetastoreFederationGrpcAsyncIOTransport, "grpc_asyncio"), + ], +) +def test_dataproc_metastore_federation_client_service_account_always_use_jwt( + transport_class, transport_name +): + with mock.patch.object( + service_account.Credentials, "with_always_use_jwt_access", create=True + ) as use_jwt: + creds = service_account.Credentials(None, None, None) + transport = transport_class(credentials=creds, always_use_jwt_access=True) + use_jwt.assert_called_once_with(True) + + with mock.patch.object( + service_account.Credentials, "with_always_use_jwt_access", create=True + ) as use_jwt: + creds = service_account.Credentials(None, None, None) + transport = transport_class(credentials=creds, always_use_jwt_access=False) + use_jwt.assert_not_called() + + +@pytest.mark.parametrize( + "client_class,transport_name", + [ + (DataprocMetastoreFederationClient, "grpc"), + (DataprocMetastoreFederationAsyncClient, "grpc_asyncio"), + ], +) +def test_dataproc_metastore_federation_client_from_service_account_file( + client_class, transport_name +): + creds = ga_credentials.AnonymousCredentials() + with mock.patch.object( + service_account.Credentials, "from_service_account_file" + ) as factory: + factory.return_value = creds + client = client_class.from_service_account_file( + "dummy/file/path.json", transport=transport_name + ) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + client = client_class.from_service_account_json( + "dummy/file/path.json", transport=transport_name + ) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == ("metastore.googleapis.com:443") + + +def test_dataproc_metastore_federation_client_get_transport_class(): + transport = DataprocMetastoreFederationClient.get_transport_class() + available_transports = [ + transports.DataprocMetastoreFederationGrpcTransport, + ] + assert transport in available_transports + + transport = DataprocMetastoreFederationClient.get_transport_class("grpc") + assert transport == transports.DataprocMetastoreFederationGrpcTransport + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +@mock.patch.object( + DataprocMetastoreFederationClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationClient), +) +@mock.patch.object( + DataprocMetastoreFederationAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationAsyncClient), +) +def test_dataproc_metastore_federation_client_client_options( + client_class, transport_class, transport_name +): + # Check that if channel is provided we won't create a new one. + with mock.patch.object( + DataprocMetastoreFederationClient, "get_transport_class" + ) as gtc: + transport = transport_class(credentials=ga_credentials.AnonymousCredentials()) + client = client_class(transport=transport) + gtc.assert_not_called() + + # Check that if channel is provided via str we will create a new one. + with mock.patch.object( + DataprocMetastoreFederationClient, "get_transport_class" + ) as gtc: + client = client_class(transport=transport_name) + gtc.assert_called() + + # Check the case api_endpoint is provided. + options = client_options.ClientOptions(api_endpoint="squid.clam.whelk") + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name, client_options=options) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_MTLS_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has + # unsupported value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): + with pytest.raises(MutualTLSChannelError): + client = client_class(transport=transport_name) + + # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"} + ): + with pytest.raises(ValueError): + client = client_class(transport=transport_name) + + # Check the case quota_project_id is provided + options = client_options.ClientOptions(quota_project_id="octopus") + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id="octopus", + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + # Check the case api_endpoint is provided + options = client_options.ClientOptions( + api_audience="https://language.googleapis.com" + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience="https://language.googleapis.com", + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,use_client_cert_env", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + "true", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + "true", + ), + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + "false", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + "false", + ), + ], +) +@mock.patch.object( + DataprocMetastoreFederationClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationClient), +) +@mock.patch.object( + DataprocMetastoreFederationAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationAsyncClient), +) +@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) +def test_dataproc_metastore_federation_client_mtls_env_auto( + client_class, transport_class, transport_name, use_client_cert_env +): + # This tests the endpoint autoswitch behavior. Endpoint is autoswitched to the default + # mtls endpoint, if GOOGLE_API_USE_CLIENT_CERTIFICATE is "true" and client cert exists. + + # Check the case client_cert_source is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + options = client_options.ClientOptions( + client_cert_source=client_cert_source_callback + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + + if use_client_cert_env == "false": + expected_client_cert_source = None + expected_host = client.DEFAULT_ENDPOINT + else: + expected_client_cert_source = client_cert_source_callback + expected_host = client.DEFAULT_MTLS_ENDPOINT + + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case ADC client cert is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + with mock.patch.object(transport_class, "__init__") as patched: + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, + ): + with mock.patch( + "google.auth.transport.mtls.default_client_cert_source", + return_value=client_cert_source_callback, + ): + if use_client_cert_env == "false": + expected_host = client.DEFAULT_ENDPOINT + expected_client_cert_source = None + else: + expected_host = client.DEFAULT_MTLS_ENDPOINT + expected_client_cert_source = client_cert_source_callback + + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case client_cert_source and ADC client cert are not provided. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + with mock.patch.object(transport_class, "__init__") as patched: + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=False, + ): + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize( + "client_class", + [DataprocMetastoreFederationClient, DataprocMetastoreFederationAsyncClient], +) +@mock.patch.object( + DataprocMetastoreFederationClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationClient), +) +@mock.patch.object( + DataprocMetastoreFederationAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationAsyncClient), +) +def test_dataproc_metastore_federation_client_get_mtls_endpoint_and_cert_source( + client_class, +): + mock_client_cert_source = mock.Mock() + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "true". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + mock_api_endpoint = "foo" + options = client_options.ClientOptions( + client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint + ) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source( + options + ) + assert api_endpoint == mock_api_endpoint + assert cert_source == mock_client_cert_source + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "false". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "false"}): + mock_client_cert_source = mock.Mock() + mock_api_endpoint = "foo" + options = client_options.ClientOptions( + client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint + ) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source( + options + ) + assert api_endpoint == mock_api_endpoint + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert doesn't exist. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=False, + ): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert exists. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, + ): + with mock.patch( + "google.auth.transport.mtls.default_client_cert_source", + return_value=mock_client_cert_source, + ): + ( + api_endpoint, + cert_source, + ) = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source == mock_client_cert_source + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +def test_dataproc_metastore_federation_client_client_options_scopes( + client_class, transport_class, transport_name +): + # Check the case scopes are provided. + options = client_options.ClientOptions( + scopes=["1", "2"], + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=["1", "2"], + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,grpc_helpers", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + grpc_helpers, + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + grpc_helpers_async, + ), + ], +) +def test_dataproc_metastore_federation_client_client_options_credentials_file( + client_class, transport_class, transport_name, grpc_helpers +): + # Check the case credentials file is provided. + options = client_options.ClientOptions(credentials_file="credentials.json") + + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +def test_dataproc_metastore_federation_client_client_options_from_dict(): + with mock.patch( + "google.cloud.metastore_v1beta.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationGrpcTransport.__init__" + ) as grpc_transport: + grpc_transport.return_value = None + client = DataprocMetastoreFederationClient( + client_options={"api_endpoint": "squid.clam.whelk"} + ) + grpc_transport.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,grpc_helpers", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + grpc_helpers, + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + grpc_helpers_async, + ), + ], +) +def test_dataproc_metastore_federation_client_create_channel_credentials_file( + client_class, transport_class, transport_name, grpc_helpers +): + # Check the case credentials file is provided. + options = client_options.ClientOptions(credentials_file="credentials.json") + + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # test that the credentials from file are saved and used as the credentials. + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel" + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + file_creds = ga_credentials.AnonymousCredentials() + load_creds.return_value = (file_creds, None) + adc.return_value = (creds, None) + client = client_class(client_options=options, transport=transport_name) + create_channel.assert_called_with( + "metastore.googleapis.com:443", + credentials=file_creds, + credentials_file=None, + quota_project_id=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=None, + default_host="metastore.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.ListFederationsRequest, + dict, + ], +) +def test_list_federations(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.ListFederationsResponse( + next_page_token="next_page_token_value", + unreachable=["unreachable_value"], + ) + response = client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.ListFederationsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListFederationsPager) + assert response.next_page_token == "next_page_token_value" + assert response.unreachable == ["unreachable_value"] + + +def test_list_federations_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + client.list_federations() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.ListFederationsRequest() + + +@pytest.mark.asyncio +async def test_list_federations_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.ListFederationsRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.ListFederationsResponse( + next_page_token="next_page_token_value", + unreachable=["unreachable_value"], + ) + ) + response = await client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.ListFederationsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListFederationsAsyncPager) + assert response.next_page_token == "next_page_token_value" + assert response.unreachable == ["unreachable_value"] + + +@pytest.mark.asyncio +async def test_list_federations_async_from_dict(): + await test_list_federations_async(request_type=dict) + + +def test_list_federations_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.ListFederationsRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + call.return_value = metastore_federation.ListFederationsResponse() + client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_list_federations_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.ListFederationsRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.ListFederationsResponse() + ) + await client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +def test_list_federations_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.ListFederationsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_federations( + parent="parent_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + + +def test_list_federations_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_federations( + metastore_federation.ListFederationsRequest(), + parent="parent_value", + ) + + +@pytest.mark.asyncio +async def test_list_federations_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.ListFederationsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.ListFederationsResponse() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_federations( + parent="parent_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_list_federations_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.list_federations( + metastore_federation.ListFederationsRequest(), + parent="parent_value", + ) + + +def test_list_federations_pager(transport_name: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + ) + pager = client.list_federations(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, metastore_federation.Federation) for i in results) + + +def test_list_federations_pages(transport_name: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + pages = list(client.list_federations(request={}).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.asyncio +async def test_list_federations_async_pager(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_federations), "__call__", new_callable=mock.AsyncMock + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_federations( + request={}, + ) + assert async_pager.next_page_token == "abc" + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, metastore_federation.Federation) for i in responses) + + +@pytest.mark.asyncio +async def test_list_federations_async_pages(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_federations), "__call__", new_callable=mock.AsyncMock + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in ( + await client.list_federations(request={}) + ).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.GetFederationRequest, + dict, + ], +) +def test_get_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.Federation( + name="name_value", + version="version_value", + endpoint_uri="endpoint_uri_value", + state=metastore_federation.Federation.State.CREATING, + state_message="state_message_value", + uid="uid_value", + ) + response = client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.GetFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, metastore_federation.Federation) + assert response.name == "name_value" + assert response.version == "version_value" + assert response.endpoint_uri == "endpoint_uri_value" + assert response.state == metastore_federation.Federation.State.CREATING + assert response.state_message == "state_message_value" + assert response.uid == "uid_value" + + +def test_get_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + client.get_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.GetFederationRequest() + + +@pytest.mark.asyncio +async def test_get_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.GetFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.Federation( + name="name_value", + version="version_value", + endpoint_uri="endpoint_uri_value", + state=metastore_federation.Federation.State.CREATING, + state_message="state_message_value", + uid="uid_value", + ) + ) + response = await client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.GetFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, metastore_federation.Federation) + assert response.name == "name_value" + assert response.version == "version_value" + assert response.endpoint_uri == "endpoint_uri_value" + assert response.state == metastore_federation.Federation.State.CREATING + assert response.state_message == "state_message_value" + assert response.uid == "uid_value" + + +@pytest.mark.asyncio +async def test_get_federation_async_from_dict(): + await test_get_federation_async(request_type=dict) + + +def test_get_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.GetFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + call.return_value = metastore_federation.Federation() + client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_get_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.GetFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.Federation() + ) + await client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +def test_get_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.Federation() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +def test_get_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_federation( + metastore_federation.GetFederationRequest(), + name="name_value", + ) + + +@pytest.mark.asyncio +async def test_get_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.Federation() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.Federation() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_get_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_federation( + metastore_federation.GetFederationRequest(), + name="name_value", + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.CreateFederationRequest, + dict, + ], +) +def test_create_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + response = client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.CreateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_create_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + client.create_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.CreateFederationRequest() + + +@pytest.mark.asyncio +async def test_create_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.CreateFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + response = await client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.CreateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_create_federation_async_from_dict(): + await test_create_federation_async(request_type=dict) + + +def test_create_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.CreateFederationRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + call.return_value = operations_pb2.Operation(name="operations/op") + client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_create_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.CreateFederationRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + await client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +def test_create_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_federation( + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].federation_id + mock_val = "federation_id_value" + assert arg == mock_val + + +def test_create_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_federation( + metastore_federation.CreateFederationRequest(), + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + +@pytest.mark.asyncio +async def test_create_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_federation( + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].federation_id + mock_val = "federation_id_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_create_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.create_federation( + metastore_federation.CreateFederationRequest(), + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.UpdateFederationRequest, + dict, + ], +) +def test_update_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + response = client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.UpdateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_update_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + client.update_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.UpdateFederationRequest() + + +@pytest.mark.asyncio +async def test_update_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.UpdateFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + response = await client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.UpdateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_update_federation_async_from_dict(): + await test_update_federation_async(request_type=dict) + + +def test_update_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.UpdateFederationRequest() + + request.federation.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + call.return_value = operations_pb2.Operation(name="operations/op") + client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "federation.name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_update_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.UpdateFederationRequest() + + request.federation.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + await client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "federation.name=name_value", + ) in kw["metadata"] + + +def test_update_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_federation( + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + assert arg == mock_val + + +def test_update_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_federation( + metastore_federation.UpdateFederationRequest(), + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + +@pytest.mark.asyncio +async def test_update_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_federation( + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_update_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_federation( + metastore_federation.UpdateFederationRequest(), + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.DeleteFederationRequest, + dict, + ], +) +def test_delete_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + response = client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.DeleteFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_delete_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + client.delete_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.DeleteFederationRequest() + + +@pytest.mark.asyncio +async def test_delete_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.DeleteFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + response = await client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.DeleteFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_delete_federation_async_from_dict(): + await test_delete_federation_async(request_type=dict) + + +def test_delete_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.DeleteFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + call.return_value = operations_pb2.Operation(name="operations/op") + client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_delete_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.DeleteFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + await client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +def test_delete_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.delete_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +def test_delete_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_federation( + metastore_federation.DeleteFederationRequest(), + name="name_value", + ) + + +@pytest.mark.asyncio +async def test_delete_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.delete_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_delete_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.delete_federation( + metastore_federation.DeleteFederationRequest(), + name="name_value", + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide an api_key and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options=options, + transport=transport, + ) + + # It is an error to provide an api_key and a credential. + options = mock.Mock() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options=options, credentials=ga_credentials.AnonymousCredentials() + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options={"scopes": ["1", "2"]}, + transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + client = DataprocMetastoreFederationClient(transport=transport) + assert client.transport is transport + + +def test_transport_get_channel(): + # A client may be instantiated with a custom transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + transport = transports.DataprocMetastoreFederationGrpcAsyncIOTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class() + adc.assert_called_once() + + +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + ], +) +def test_transport_kind(transport_name): + transport = DataprocMetastoreFederationClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + +def test_transport_grpc_default(): + # A client should use the gRPC transport by default. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert isinstance( + client.transport, + transports.DataprocMetastoreFederationGrpcTransport, + ) + + +def test_dataproc_metastore_federation_base_transport_error(): + # Passing both a credentials object and credentials_file should raise an error + with pytest.raises(core_exceptions.DuplicateCredentialArgs): + transport = transports.DataprocMetastoreFederationTransport( + credentials=ga_credentials.AnonymousCredentials(), + credentials_file="credentials.json", + ) + + +def test_dataproc_metastore_federation_base_transport(): + # Instantiate the base transport. + with mock.patch( + "google.cloud.metastore_v1beta.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationTransport.__init__" + ) as Transport: + Transport.return_value = None + transport = transports.DataprocMetastoreFederationTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Every method on the transport should just blindly + # raise NotImplementedError. + methods = ( + "list_federations", + "get_federation", + "create_federation", + "update_federation", + "delete_federation", + ) + for method in methods: + with pytest.raises(NotImplementedError): + getattr(transport, method)(request=object()) + + with pytest.raises(NotImplementedError): + transport.close() + + # Additionally, the LRO client (a property) should + # also raise NotImplementedError + with pytest.raises(NotImplementedError): + transport.operations_client + + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + + +def test_dataproc_metastore_federation_base_transport_with_credentials_file(): + # Instantiate the base transport with a credentials file + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch( + "google.cloud.metastore_v1beta.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.DataprocMetastoreFederationTransport( + credentials_file="credentials.json", + quota_project_id="octopus", + ) + load_creds.assert_called_once_with( + "credentials.json", + scopes=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", + ) + + +def test_dataproc_metastore_federation_base_transport_with_adc(): + # Test the default credentials are used if credentials and credentials_file are None. + with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch( + "google.cloud.metastore_v1beta.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.DataprocMetastoreFederationTransport() + adc.assert_called_once() + + +def test_dataproc_metastore_federation_auth_adc(): + # If no credentials are provided, we should use ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + DataprocMetastoreFederationClient() + adc.assert_called_once_with( + scopes=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id=None, + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_auth_adc(transport_class): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + adc.assert_called_once_with( + scopes=["1", "2"], + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_auth_gdch_credentials(transport_class): + host = "https://language.com" + api_audience_tests = [None, "https://language2.com"] + api_audience_expect = [host, "https://language2.com"] + for t, e in zip(api_audience_tests, api_audience_expect): + with mock.patch.object(google.auth, "default", autospec=True) as adc: + gdch_mock = mock.MagicMock() + type(gdch_mock).with_gdch_audience = mock.PropertyMock( + return_value=gdch_mock + ) + adc.return_value = (gdch_mock, None) + transport_class(host=host, api_audience=t) + gdch_mock.with_gdch_audience.assert_called_once_with(e) + + +@pytest.mark.parametrize( + "transport_class,grpc_helpers", + [ + (transports.DataprocMetastoreFederationGrpcTransport, grpc_helpers), + ( + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + grpc_helpers_async, + ), + ], +) +def test_dataproc_metastore_federation_transport_create_channel( + transport_class, grpc_helpers +): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel", autospec=True + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + adc.return_value = (creds, None) + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + + create_channel.assert_called_with( + "metastore.googleapis.com:443", + credentials=creds, + credentials_file=None, + quota_project_id="octopus", + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=["1", "2"], + default_host="metastore.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_grpc_transport_client_cert_source_for_mtls( + transport_class, +): + cred = ga_credentials.AnonymousCredentials() + + # Check ssl_channel_credentials is used if provided. + with mock.patch.object(transport_class, "create_channel") as mock_create_channel: + mock_ssl_channel_creds = mock.Mock() + transport_class( + host="squid.clam.whelk", + credentials=cred, + ssl_channel_credentials=mock_ssl_channel_creds, + ) + mock_create_channel.assert_called_once_with( + "squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_channel_creds, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls + # is used. + with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()): + with mock.patch("grpc.ssl_channel_credentials") as mock_ssl_cred: + transport_class( + credentials=cred, + client_cert_source_for_mtls=client_cert_source_callback, + ) + expected_cert, expected_key = client_cert_source_callback() + mock_ssl_cred.assert_called_once_with( + certificate_chain=expected_cert, private_key=expected_key + ) + + +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + "grpc_asyncio", + ], +) +def test_dataproc_metastore_federation_host_no_port(transport_name): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="metastore.googleapis.com" + ), + transport=transport_name, + ) + assert client.transport._host == ("metastore.googleapis.com:443") + + +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + "grpc_asyncio", + ], +) +def test_dataproc_metastore_federation_host_with_port(transport_name): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="metastore.googleapis.com:8000" + ), + transport=transport_name, + ) + assert client.transport._host == ("metastore.googleapis.com:8000") + + +def test_dataproc_metastore_federation_grpc_transport_channel(): + channel = grpc.secure_channel("http://localhost/", grpc.local_channel_credentials()) + + # Check that channel is used if provided. + transport = transports.DataprocMetastoreFederationGrpcTransport( + host="squid.clam.whelk", + channel=channel, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert transport._ssl_channel_credentials == None + + +def test_dataproc_metastore_federation_grpc_asyncio_transport_channel(): + channel = aio.secure_channel("http://localhost/", grpc.local_channel_credentials()) + + # Check that channel is used if provided. + transport = transports.DataprocMetastoreFederationGrpcAsyncIOTransport( + host="squid.clam.whelk", + channel=channel, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert transport._ssl_channel_credentials == None + + +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_channel_mtls_with_client_cert_source( + transport_class, +): + with mock.patch( + "grpc.ssl_channel_credentials", autospec=True + ) as grpc_ssl_channel_cred: + with mock.patch.object( + transport_class, "create_channel" + ) as grpc_create_channel: + mock_ssl_cred = mock.Mock() + grpc_ssl_channel_cred.return_value = mock_ssl_cred + + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + cred = ga_credentials.AnonymousCredentials() + with pytest.warns(DeprecationWarning): + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (cred, None) + transport = transport_class( + host="squid.clam.whelk", + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=client_cert_source_callback, + ) + adc.assert_called_once() + + grpc_ssl_channel_cred.assert_called_once_with( + certificate_chain=b"cert bytes", private_key=b"key bytes" + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + assert transport.grpc_channel == mock_grpc_channel + assert transport._ssl_channel_credentials == mock_ssl_cred + + +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_channel_mtls_with_adc(transport_class): + mock_ssl_cred = mock.Mock() + with mock.patch.multiple( + "google.auth.transport.grpc.SslCredentials", + __init__=mock.Mock(return_value=None), + ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), + ): + with mock.patch.object( + transport_class, "create_channel" + ) as grpc_create_channel: + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + mock_cred = mock.Mock() + + with pytest.warns(DeprecationWarning): + transport = transport_class( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=None, + ) + + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + assert transport.grpc_channel == mock_grpc_channel + + +def test_dataproc_metastore_federation_grpc_lro_client(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + transport = client.transport + + # Ensure that we have a api-core operations client. + assert isinstance( + transport.operations_client, + operations_v1.OperationsClient, + ) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +def test_dataproc_metastore_federation_grpc_lro_async_client(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", + ) + transport = client.transport + + # Ensure that we have a api-core operations client. + assert isinstance( + transport.operations_client, + operations_v1.OperationsAsyncClient, + ) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +def test_federation_path(): + project = "squid" + location = "clam" + federation = "whelk" + expected = ( + "projects/{project}/locations/{location}/federations/{federation}".format( + project=project, + location=location, + federation=federation, + ) + ) + actual = DataprocMetastoreFederationClient.federation_path( + project, location, federation + ) + assert expected == actual + + +def test_parse_federation_path(): + expected = { + "project": "octopus", + "location": "oyster", + "federation": "nudibranch", + } + path = DataprocMetastoreFederationClient.federation_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_federation_path(path) + assert expected == actual + + +def test_common_billing_account_path(): + billing_account = "cuttlefish" + expected = "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + actual = DataprocMetastoreFederationClient.common_billing_account_path( + billing_account + ) + assert expected == actual + + +def test_parse_common_billing_account_path(): + expected = { + "billing_account": "mussel", + } + path = DataprocMetastoreFederationClient.common_billing_account_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_billing_account_path(path) + assert expected == actual + + +def test_common_folder_path(): + folder = "winkle" + expected = "folders/{folder}".format( + folder=folder, + ) + actual = DataprocMetastoreFederationClient.common_folder_path(folder) + assert expected == actual + + +def test_parse_common_folder_path(): + expected = { + "folder": "nautilus", + } + path = DataprocMetastoreFederationClient.common_folder_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_folder_path(path) + assert expected == actual + + +def test_common_organization_path(): + organization = "scallop" + expected = "organizations/{organization}".format( + organization=organization, + ) + actual = DataprocMetastoreFederationClient.common_organization_path(organization) + assert expected == actual + + +def test_parse_common_organization_path(): + expected = { + "organization": "abalone", + } + path = DataprocMetastoreFederationClient.common_organization_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_organization_path(path) + assert expected == actual + + +def test_common_project_path(): + project = "squid" + expected = "projects/{project}".format( + project=project, + ) + actual = DataprocMetastoreFederationClient.common_project_path(project) + assert expected == actual + + +def test_parse_common_project_path(): + expected = { + "project": "clam", + } + path = DataprocMetastoreFederationClient.common_project_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_project_path(path) + assert expected == actual + + +def test_common_location_path(): + project = "whelk" + location = "octopus" + expected = "projects/{project}/locations/{location}".format( + project=project, + location=location, + ) + actual = DataprocMetastoreFederationClient.common_location_path(project, location) + assert expected == actual + + +def test_parse_common_location_path(): + expected = { + "project": "oyster", + "location": "nudibranch", + } + path = DataprocMetastoreFederationClient.common_location_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_location_path(path) + assert expected == actual + + +def test_client_with_default_client_info(): + client_info = gapic_v1.client_info.ClientInfo() + + with mock.patch.object( + transports.DataprocMetastoreFederationTransport, "_prep_wrapped_messages" + ) as prep: + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, + ) + prep.assert_called_once_with(client_info) + + with mock.patch.object( + transports.DataprocMetastoreFederationTransport, "_prep_wrapped_messages" + ) as prep: + transport_class = DataprocMetastoreFederationClient.get_transport_class() + transport = transport_class( + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, + ) + prep.assert_called_once_with(client_info) + + +@pytest.mark.asyncio +async def test_transport_close_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", + ) + with mock.patch.object( + type(getattr(client.transport, "grpc_channel")), "close" + ) as close: + async with client: + close.assert_not_called() + close.assert_called_once() + + +def test_transport_close(): + transports = { + "grpc": "_grpc_channel", + } + + for transport, close_name in transports.items(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport + ) + with mock.patch.object( + type(getattr(client.transport, close_name)), "close" + ) as close: + with client: + close.assert_not_called() + close.assert_called_once() + + +def test_client_ctx(): + transports = [ + "grpc", + ] + for transport in transports: + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport + ) + # Test client calls underlying transport. + with mock.patch.object(type(client.transport), "close") as close: + close.assert_not_called() + with client: + pass + close.assert_called() + + +@pytest.mark.parametrize( + "client_class,transport_class", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ), + ], +) +def test_api_key_credentials(client_class, transport_class): + with mock.patch.object( + google.auth._default, "get_api_key_credentials", create=True + ) as get_api_key_credentials: + mock_cred = mock.Mock() + get_api_key_credentials.return_value = mock_cred + options = client_options.ClientOptions() + options.api_key = "api_key" + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options) + patched.assert_called_once_with( + credentials=mock_cred, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + )