diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml index 889f77d..6d064dd 100644 --- a/.github/.OwlBot.lock.yaml +++ b/.github/.OwlBot.lock.yaml @@ -1,4 +1,4 @@ -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,4 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:c43f1d918bcf817d337aa29ff833439494a158a0831508fda4ec75dc4c0d0320 + digest: sha256:94bb690db96e6242b2567a4860a94d48fa48696d092e51b0884a1a2c0a79a407 +# created: 2024-07-31T14:52:44.926548819Z diff --git a/.github/auto-label.yaml b/.github/auto-label.yaml index 41bff0b..21786a4 100644 --- a/.github/auto-label.yaml +++ b/.github/auto-label.yaml @@ -1,4 +1,4 @@ -# Copyright 2022 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,3 +13,8 @@ # limitations under the License. requestsize: enabled: true + +path: + pullrequest: true + paths: + samples: "samples" diff --git a/.github/blunderbuss.yml b/.github/blunderbuss.yml new file mode 100644 index 0000000..990b311 --- /dev/null +++ b/.github/blunderbuss.yml @@ -0,0 +1,17 @@ +# Blunderbuss config +# +# This file controls who is assigned for pull requests and issues. +# Note: This file is autogenerated. To make changes to the assignee +# team, please update `codeowner_team` in `.repo-metadata.json`. + +assign_issues: + - googleapis/python-core-client-libraries + +assign_issues_by: + - labels: + - "samples" + to: + - googleapis/python-samples-reviewers + +assign_prs: + - googleapis/python-core-client-libraries diff --git a/.gitignore b/.gitignore index b4243ce..d083ea1 100644 --- a/.gitignore +++ b/.gitignore @@ -50,6 +50,7 @@ docs.metadata # Virtual environment env/ +venv/ # Test logs coverage.xml diff --git a/.kokoro/build.sh b/.kokoro/build.sh index 7444a47..0ff3a4b 100755 --- a/.kokoro/build.sh +++ b/.kokoro/build.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2018 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -33,13 +33,6 @@ export GOOGLE_APPLICATION_CREDENTIALS=${KOKORO_GFILE_DIR}/service-account.json # Setup project id. export PROJECT_ID=$(cat "${KOKORO_GFILE_DIR}/project-id.json") -# Remove old nox -python3 -m pip uninstall --yes --quiet nox-automation - -# Install nox -python3 -m pip install --upgrade --quiet nox -python3 -m nox --version - # If this is a continuous build, send the test log to the FlakyBot. # See https://github.com/googleapis/repo-automation-bots/tree/main/packages/flakybot. if [[ $KOKORO_BUILD_ARTIFACTS_SUBDIR = *"continuous"* ]]; then diff --git a/.kokoro/docker/docs/Dockerfile b/.kokoro/docker/docs/Dockerfile index f8137d0..e5410e2 100644 --- a/.kokoro/docker/docs/Dockerfile +++ b/.kokoro/docker/docs/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2020 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from ubuntu:22.04 +from ubuntu:24.04 ENV DEBIAN_FRONTEND noninteractive @@ -40,7 +40,6 @@ RUN apt-get update \ libssl-dev \ libsqlite3-dev \ portaudio19-dev \ - python3-distutils \ redis-server \ software-properties-common \ ssh \ @@ -60,24 +59,31 @@ RUN apt-get update \ && rm -rf /var/lib/apt/lists/* \ && rm -f /var/cache/apt/archives/*.deb -###################### Install python 3.9.13 -# Download python 3.9.13 -RUN wget https://www.python.org/ftp/python/3.9.13/Python-3.9.13.tgz +###################### Install python 3.10.14 for docs/docfx session + +# Download python 3.10.14 +RUN wget https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz # Extract files -RUN tar -xvf Python-3.9.13.tgz +RUN tar -xvf Python-3.10.14.tgz -# Install python 3.9.13 -RUN ./Python-3.9.13/configure --enable-optimizations +# Install python 3.10.14 +RUN ./Python-3.10.14/configure --enable-optimizations RUN make altinstall +ENV PATH /usr/local/bin/python3.10:$PATH + ###################### Install pip RUN wget -O /tmp/get-pip.py 'https://bootstrap.pypa.io/get-pip.py' \ - && python3 /tmp/get-pip.py \ + && python3.10 /tmp/get-pip.py \ && rm /tmp/get-pip.py # Test pip -RUN python3 -m pip +RUN python3.10 -m pip + +# Install build requirements +COPY requirements.txt /requirements.txt +RUN python3.10 -m pip install --require-hashes -r requirements.txt -CMD ["python3.8"] +CMD ["python3.10"] diff --git a/.kokoro/docker/docs/requirements.in b/.kokoro/docker/docs/requirements.in new file mode 100644 index 0000000..816817c --- /dev/null +++ b/.kokoro/docker/docs/requirements.in @@ -0,0 +1 @@ +nox diff --git a/.kokoro/docker/docs/requirements.txt b/.kokoro/docker/docs/requirements.txt new file mode 100644 index 0000000..7129c77 --- /dev/null +++ b/.kokoro/docker/docs/requirements.txt @@ -0,0 +1,42 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --allow-unsafe --generate-hashes requirements.in +# +argcomplete==3.4.0 \ + --hash=sha256:69a79e083a716173e5532e0fa3bef45f793f4e61096cf52b5a42c0211c8b8aa5 \ + --hash=sha256:c2abcdfe1be8ace47ba777d4fce319eb13bf8ad9dace8d085dcad6eded88057f + # via nox +colorlog==6.8.2 \ + --hash=sha256:3e3e079a41feb5a1b64f978b5ea4f46040a94f11f0e8bbb8261e3dbbeca64d44 \ + --hash=sha256:4dcbb62368e2800cb3c5abd348da7e53f6c362dda502ec27c560b2e58a66bd33 + # via nox +distlib==0.3.8 \ + --hash=sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784 \ + --hash=sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64 + # via virtualenv +filelock==3.15.4 \ + --hash=sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb \ + --hash=sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7 + # via virtualenv +nox==2024.4.15 \ + --hash=sha256:6492236efa15a460ecb98e7b67562a28b70da006ab0be164e8821177577c0565 \ + --hash=sha256:ecf6700199cdfa9e5ea0a41ff5e6ef4641d09508eda6edb89d9987864115817f + # via -r requirements.in +packaging==24.1 \ + --hash=sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002 \ + --hash=sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124 + # via nox +platformdirs==4.2.2 \ + --hash=sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee \ + --hash=sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3 + # via virtualenv +tomli==2.0.1 \ + --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ + --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f + # via nox +virtualenv==20.26.3 \ + --hash=sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a \ + --hash=sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589 + # via nox diff --git a/.kokoro/populate-secrets.sh b/.kokoro/populate-secrets.sh index f525142..c435402 100755 --- a/.kokoro/populate-secrets.sh +++ b/.kokoro/populate-secrets.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2020 Google LLC. +# Copyright 2024 Google LLC. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/.kokoro/release.sh b/.kokoro/release.sh index 7c87739..46a2c2b 100755 --- a/.kokoro/release.sh +++ b/.kokoro/release.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2020 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/.kokoro/release/common.cfg b/.kokoro/release/common.cfg index 5fa5b03..eed8f72 100644 --- a/.kokoro/release/common.cfg +++ b/.kokoro/release/common.cfg @@ -38,3 +38,12 @@ env_vars: { key: "SECRET_MANAGER_KEYS" value: "releasetool-publish-reporter-app,releasetool-publish-reporter-googleapis-installation,releasetool-publish-reporter-pem" } + +# Store the packages we uploaded to PyPI. That way, we have a record of exactly +# what we published, which we can use to generate SBOMs and attestations. +action { + define_artifacts { + regex: "github/python-audit-log/**/*.tar.gz" + strip_prefix: "github/python-audit-log" + } +} diff --git a/.kokoro/requirements.in b/.kokoro/requirements.in index cbd7e77..fff4d9c 100644 --- a/.kokoro/requirements.in +++ b/.kokoro/requirements.in @@ -1,10 +1,11 @@ gcp-docuploader -gcp-releasetool +gcp-releasetool>=2 # required for compatibility with cryptography>=42.x importlib-metadata typing-extensions twine wheel setuptools -nox +nox>=2022.11.21 # required to remove dependency on py charset-normalizer<3 click<8.1.0 +cryptography>=42.0.5 diff --git a/.kokoro/requirements.txt b/.kokoro/requirements.txt index 05dc467..9622baf 100644 --- a/.kokoro/requirements.txt +++ b/.kokoro/requirements.txt @@ -1,94 +1,82 @@ # -# This file is autogenerated by pip-compile with python 3.10 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: # # pip-compile --allow-unsafe --generate-hashes requirements.in # -argcomplete==2.0.0 \ - --hash=sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20 \ - --hash=sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e +argcomplete==3.4.0 \ + --hash=sha256:69a79e083a716173e5532e0fa3bef45f793f4e61096cf52b5a42c0211c8b8aa5 \ + --hash=sha256:c2abcdfe1be8ace47ba777d4fce319eb13bf8ad9dace8d085dcad6eded88057f # via nox -attrs==22.1.0 \ - --hash=sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6 \ - --hash=sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c +attrs==23.2.0 \ + --hash=sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30 \ + --hash=sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1 # via gcp-releasetool -bleach==5.0.1 \ - --hash=sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a \ - --hash=sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c - # via readme-renderer -cachetools==5.2.0 \ - --hash=sha256:6a94c6402995a99c3970cc7e4884bb60b4a8639938157eeed436098bf9831757 \ - --hash=sha256:f9f17d2aec496a9aa6b76f53e3b614c965223c061982d434d160f930c698a9db +backports-tarfile==1.2.0 \ + --hash=sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34 \ + --hash=sha256:d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991 + # via jaraco-context +cachetools==5.3.3 \ + --hash=sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945 \ + --hash=sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105 # via google-auth -certifi==2022.12.7 \ - --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ - --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 +certifi==2024.7.4 \ + --hash=sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b \ + --hash=sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90 # via requests -cffi==1.15.1 \ - --hash=sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5 \ - --hash=sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef \ - --hash=sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104 \ - --hash=sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426 \ - --hash=sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405 \ - --hash=sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375 \ - --hash=sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a \ - --hash=sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e \ - --hash=sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc \ - --hash=sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf \ - --hash=sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185 \ - --hash=sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497 \ - --hash=sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3 \ - --hash=sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35 \ - --hash=sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c \ - --hash=sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83 \ - --hash=sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21 \ - --hash=sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca \ - --hash=sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984 \ - --hash=sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac \ - --hash=sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd \ - --hash=sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee \ - --hash=sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a \ - --hash=sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2 \ - --hash=sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192 \ - --hash=sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7 \ - --hash=sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585 \ - --hash=sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f \ - --hash=sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e \ - --hash=sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27 \ - --hash=sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b \ - --hash=sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e \ - --hash=sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e \ - --hash=sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d \ - --hash=sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c \ - --hash=sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415 \ - --hash=sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82 \ - --hash=sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02 \ - --hash=sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314 \ - --hash=sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325 \ - --hash=sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c \ - --hash=sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3 \ - --hash=sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914 \ - --hash=sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045 \ - --hash=sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d \ - --hash=sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9 \ - --hash=sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5 \ - --hash=sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2 \ - --hash=sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c \ - --hash=sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3 \ - --hash=sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2 \ - --hash=sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8 \ - --hash=sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d \ - --hash=sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d \ - --hash=sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9 \ - --hash=sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162 \ - --hash=sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76 \ - --hash=sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4 \ - --hash=sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e \ - --hash=sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9 \ - --hash=sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6 \ - --hash=sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b \ - --hash=sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01 \ - --hash=sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0 +cffi==1.16.0 \ + --hash=sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc \ + --hash=sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a \ + --hash=sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417 \ + --hash=sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab \ + --hash=sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520 \ + --hash=sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36 \ + --hash=sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743 \ + --hash=sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8 \ + --hash=sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed \ + --hash=sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684 \ + --hash=sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56 \ + --hash=sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324 \ + --hash=sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d \ + --hash=sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235 \ + --hash=sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e \ + --hash=sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088 \ + --hash=sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000 \ + --hash=sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7 \ + --hash=sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e \ + --hash=sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673 \ + --hash=sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c \ + --hash=sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe \ + --hash=sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2 \ + --hash=sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098 \ + --hash=sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8 \ + --hash=sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a \ + --hash=sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0 \ + --hash=sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b \ + --hash=sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896 \ + --hash=sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e \ + --hash=sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9 \ + --hash=sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2 \ + --hash=sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b \ + --hash=sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6 \ + --hash=sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404 \ + --hash=sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f \ + --hash=sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0 \ + --hash=sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4 \ + --hash=sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc \ + --hash=sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936 \ + --hash=sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba \ + --hash=sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872 \ + --hash=sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb \ + --hash=sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614 \ + --hash=sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1 \ + --hash=sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d \ + --hash=sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969 \ + --hash=sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b \ + --hash=sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4 \ + --hash=sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627 \ + --hash=sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956 \ + --hash=sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357 # via cryptography charset-normalizer==2.1.1 \ --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ @@ -103,87 +91,90 @@ click==8.0.4 \ # -r requirements.in # gcp-docuploader # gcp-releasetool -colorlog==6.7.0 \ - --hash=sha256:0d33ca236784a1ba3ff9c532d4964126d8a2c44f1f0cb1d2b0728196f512f662 \ - --hash=sha256:bd94bd21c1e13fac7bd3153f4bc3a7dc0eb0974b8bc2fdf1a989e474f6e582e5 +colorlog==6.8.2 \ + --hash=sha256:3e3e079a41feb5a1b64f978b5ea4f46040a94f11f0e8bbb8261e3dbbeca64d44 \ + --hash=sha256:4dcbb62368e2800cb3c5abd348da7e53f6c362dda502ec27c560b2e58a66bd33 # via # gcp-docuploader # nox -commonmark==0.9.1 \ - --hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60 \ - --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9 - # via rich -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 +cryptography==42.0.8 \ + --hash=sha256:013629ae70b40af70c9a7a5db40abe5d9054e6f4380e50ce769947b73bf3caad \ + --hash=sha256:2346b911eb349ab547076f47f2e035fc8ff2c02380a7cbbf8d87114fa0f1c583 \ + --hash=sha256:2f66d9cd9147ee495a8374a45ca445819f8929a3efcd2e3df6428e46c3cbb10b \ + --hash=sha256:2f88d197e66c65be5e42cd72e5c18afbfae3f741742070e3019ac8f4ac57262c \ + --hash=sha256:31f721658a29331f895a5a54e7e82075554ccfb8b163a18719d342f5ffe5ecb1 \ + --hash=sha256:343728aac38decfdeecf55ecab3264b015be68fc2816ca800db649607aeee648 \ + --hash=sha256:5226d5d21ab681f432a9c1cf8b658c0cb02533eece706b155e5fbd8a0cdd3949 \ + --hash=sha256:57080dee41209e556a9a4ce60d229244f7a66ef52750f813bfbe18959770cfba \ + --hash=sha256:5a94eccb2a81a309806027e1670a358b99b8fe8bfe9f8d329f27d72c094dde8c \ + --hash=sha256:6b7c4f03ce01afd3b76cf69a5455caa9cfa3de8c8f493e0d3ab7d20611c8dae9 \ + --hash=sha256:7016f837e15b0a1c119d27ecd89b3515f01f90a8615ed5e9427e30d9cdbfed3d \ + --hash=sha256:81884c4d096c272f00aeb1f11cf62ccd39763581645b0812e99a91505fa48e0c \ + --hash=sha256:81d8a521705787afe7a18d5bfb47ea9d9cc068206270aad0b96a725022e18d2e \ + --hash=sha256:8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2 \ + --hash=sha256:961e61cefdcb06e0c6d7e3a1b22ebe8b996eb2bf50614e89384be54c48c6b63d \ + --hash=sha256:9c0c1716c8447ee7dbf08d6db2e5c41c688544c61074b54fc4564196f55c25a7 \ + --hash=sha256:a0608251135d0e03111152e41f0cc2392d1e74e35703960d4190b2e0f4ca9c70 \ + --hash=sha256:a0c5b2b0585b6af82d7e385f55a8bc568abff8923af147ee3c07bd8b42cda8b2 \ + --hash=sha256:ad803773e9df0b92e0a817d22fd8a3675493f690b96130a5e24f1b8fabbea9c7 \ + --hash=sha256:b297f90c5723d04bcc8265fc2a0f86d4ea2e0f7ab4b6994459548d3a6b992a14 \ + --hash=sha256:ba4f0a211697362e89ad822e667d8d340b4d8d55fae72cdd619389fb5912eefe \ + --hash=sha256:c4783183f7cb757b73b2ae9aed6599b96338eb957233c58ca8f49a49cc32fd5e \ + --hash=sha256:c9bb2ae11bfbab395bdd072985abde58ea9860ed84e59dbc0463a5d0159f5b71 \ + --hash=sha256:cafb92b2bc622cd1aa6a1dce4b93307792633f4c5fe1f46c6b97cf67073ec961 \ + --hash=sha256:d45b940883a03e19e944456a558b67a41160e367a719833c53de6911cabba2b7 \ + --hash=sha256:dc0fdf6787f37b1c6b08e6dfc892d9d068b5bdb671198c72072828b80bd5fe4c \ + --hash=sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28 \ + --hash=sha256:dec9b018df185f08483f294cae6ccac29e7a6e0678996587363dc352dc65c842 \ + --hash=sha256:e3ec3672626e1b9e55afd0df6d774ff0e953452886e06e0f1eb7eb0c832e8902 \ + --hash=sha256:e599b53fd95357d92304510fb7bda8523ed1f79ca98dce2f43c115950aa78801 \ + --hash=sha256:fa76fbb7596cc5839320000cdd5d0955313696d9511debab7ee7278fc8b5c84a \ + --hash=sha256:fff12c88a672ab9c9c1cf7b0c80e3ad9e2ebd9d828d955c126be4fd3e5578c9e # via + # -r requirements.in # gcp-releasetool # secretstorage -distlib==0.3.6 \ - --hash=sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46 \ - --hash=sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e +distlib==0.3.8 \ + --hash=sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784 \ + --hash=sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64 # via virtualenv -docutils==0.19 \ - --hash=sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6 \ - --hash=sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc +docutils==0.21.2 \ + --hash=sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f \ + --hash=sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2 # via readme-renderer -filelock==3.8.0 \ - --hash=sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc \ - --hash=sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4 +filelock==3.15.4 \ + --hash=sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb \ + --hash=sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7 # via virtualenv -gcp-docuploader==0.6.4 \ - --hash=sha256:01486419e24633af78fd0167db74a2763974765ee8078ca6eb6964d0ebd388af \ - --hash=sha256:70861190c123d907b3b067da896265ead2eeb9263969d6955c9e0bb091b5ccbf +gcp-docuploader==0.6.5 \ + --hash=sha256:30221d4ac3e5a2b9c69aa52fdbef68cc3f27d0e6d0d90e220fc024584b8d2318 \ + --hash=sha256:b7458ef93f605b9d46a4bf3a8dc1755dad1f31d030c8679edf304e343b347eea # via -r requirements.in -gcp-releasetool==1.10.0 \ - --hash=sha256:72a38ca91b59c24f7e699e9227c90cbe4dd71b789383cb0164b088abae294c83 \ - --hash=sha256:8c7c99320208383d4bb2b808c6880eb7a81424afe7cdba3c8d84b25f4f0e097d +gcp-releasetool==2.0.1 \ + --hash=sha256:34314a910c08e8911d9c965bd44f8f2185c4f556e737d719c33a41f6a610de96 \ + --hash=sha256:b0d5863c6a070702b10883d37c4bdfd74bf930fe417f36c0c965d3b7c779ae62 # via -r requirements.in -google-api-core==2.10.2 \ - --hash=sha256:10c06f7739fe57781f87523375e8e1a3a4674bf6392cd6131a3222182b971320 \ - --hash=sha256:34f24bd1d5f72a8c4519773d99ca6bf080a6c4e041b4e9f024fe230191dda62e +google-api-core==2.19.1 \ + --hash=sha256:f12a9b8309b5e21d92483bbd47ce2c445861ec7d269ef6784ecc0ea8c1fa6125 \ + --hash=sha256:f4695f1e3650b316a795108a76a1c416e6afb036199d1c1f1f110916df479ffd # via # google-cloud-core # google-cloud-storage -google-auth==2.14.1 \ - --hash=sha256:ccaa901f31ad5cbb562615eb8b664b3dd0bf5404a67618e642307f00613eda4d \ - --hash=sha256:f5d8701633bebc12e0deea4df8abd8aff31c28b355360597f7f2ee60f2e4d016 +google-auth==2.31.0 \ + --hash=sha256:042c4702efa9f7d3c48d3a69341c209381b125faa6dbf3ebe56bc7e40ae05c23 \ + --hash=sha256:87805c36970047247c8afe614d4e3af8eceafc1ebba0c679fe75ddd1d575e871 # via # gcp-releasetool # google-api-core # google-cloud-core # google-cloud-storage -google-cloud-core==2.3.2 \ - --hash=sha256:8417acf6466be2fa85123441696c4badda48db314c607cf1e5d543fa8bdc22fe \ - --hash=sha256:b9529ee7047fd8d4bf4a2182de619154240df17fbe60ead399078c1ae152af9a +google-cloud-core==2.4.1 \ + --hash=sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073 \ + --hash=sha256:a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61 # via google-cloud-storage -google-cloud-storage==2.6.0 \ - --hash=sha256:104ca28ae61243b637f2f01455cc8a05e8f15a2a18ced96cb587241cdd3820f5 \ - --hash=sha256:4ad0415ff61abdd8bb2ae81c1f8f7ec7d91a1011613f2db87c614c550f97bfe9 +google-cloud-storage==2.17.0 \ + --hash=sha256:49378abff54ef656b52dca5ef0f2eba9aa83dc2b2c72c78714b03a1a95fe9388 \ + --hash=sha256:5b393bc766b7a3bc6f5407b9e665b2450d36282614b7945e570b3480a456d1e1 # via gcp-docuploader google-crc32c==1.5.0 \ --hash=sha256:024894d9d3cfbc5943f8f230e23950cd4906b2fe004c72e29b209420a1e6b05a \ @@ -254,29 +245,39 @@ google-crc32c==1.5.0 \ --hash=sha256:f583edb943cf2e09c60441b910d6a20b4d9d626c75a36c8fcac01a6c96c01183 \ --hash=sha256:fd8536e902db7e365f49e7d9029283403974ccf29b13fc7028b97e2295b33556 \ --hash=sha256:fe70e325aa68fa4b5edf7d1a4b6f691eb04bbccac0ace68e34820d283b5f80d4 - # via google-resumable-media -google-resumable-media==2.4.0 \ - --hash=sha256:2aa004c16d295c8f6c33b2b4788ba59d366677c0a25ae7382436cb30f776deaa \ - --hash=sha256:8d5518502f92b9ecc84ac46779bd4f09694ecb3ba38a3e7ca737a86d15cbca1f + # via + # google-cloud-storage + # google-resumable-media +google-resumable-media==2.7.1 \ + --hash=sha256:103ebc4ba331ab1bfdac0250f8033627a2cd7cde09e7ccff9181e31ba4315b2c \ + --hash=sha256:eae451a7b2e2cdbaaa0fd2eb00cc8a1ee5e95e16b55597359cbc3d27d7d90e33 # via google-cloud-storage -googleapis-common-protos==1.57.0 \ - --hash=sha256:27a849d6205838fb6cc3c1c21cb9800707a661bb21c6ce7fb13e99eb1f8a0c46 \ - --hash=sha256:a9f4a1d7f6d9809657b7f1316a1aa527f6664891531bcfcc13b6696e685f443c +googleapis-common-protos==1.63.2 \ + --hash=sha256:27a2499c7e8aff199665b22741997e485eccc8645aa9176c7c988e6fae507945 \ + --hash=sha256:27c5abdffc4911f28101e635de1533fb4cfd2c37fbaa9174587c799fac90aa87 # via google-api-core -idna==3.4 \ - --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ - --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 +idna==3.7 \ + --hash=sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc \ + --hash=sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0 # via requests -importlib-metadata==5.0.0 \ - --hash=sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab \ - --hash=sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43 +importlib-metadata==8.0.0 \ + --hash=sha256:15584cf2b1bf449d98ff8a6ff1abef57bf20f3ac6454f431736cd3e660921b2f \ + --hash=sha256:188bd24e4c346d3f0a933f275c2fec67050326a856b9a359881d7c2a697e8812 # via # -r requirements.in # keyring # twine -jaraco-classes==3.2.3 \ - --hash=sha256:2353de3288bc6b82120752201c6b1c1a14b058267fa424ed5ce5984e3b922158 \ - --hash=sha256:89559fa5c1d3c34eff6f631ad80bb21f378dbcbb35dd161fd2c6b93f5be2f98a +jaraco-classes==3.4.0 \ + --hash=sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd \ + --hash=sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 + # via keyring +jaraco-context==5.3.0 \ + --hash=sha256:3e16388f7da43d384a1a7cd3452e72e14732ac9fe459678773a3608a812bf266 \ + --hash=sha256:c2f67165ce1f9be20f32f650f25d8edfc1646a8aeee48ae06fb35f90763576d2 + # via keyring +jaraco-functools==4.0.1 \ + --hash=sha256:3b24ccb921d6b593bdceb56ce14799204f473976e2a9d4b15b04d0f2c2326664 \ + --hash=sha256:d33fa765374c0611b52f8b3a795f8900869aa88c84769d4d1746cd68fb28c3e8 # via keyring jeepney==0.8.0 \ --hash=sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806 \ @@ -284,170 +285,205 @@ jeepney==0.8.0 \ # via # keyring # secretstorage -jinja2==3.1.2 \ - --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ - --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 +jinja2==3.1.4 \ + --hash=sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369 \ + --hash=sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d # via gcp-releasetool -keyring==23.11.0 \ - --hash=sha256:3dd30011d555f1345dec2c262f0153f2f0ca6bca041fb1dc4588349bb4c0ac1e \ - --hash=sha256:ad192263e2cdd5f12875dedc2da13534359a7e760e77f8d04b50968a821c2361 +keyring==25.2.1 \ + --hash=sha256:2458681cdefc0dbc0b7eb6cf75d0b98e59f9ad9b2d4edd319d18f68bdca95e50 \ + --hash=sha256:daaffd42dbda25ddafb1ad5fec4024e5bbcfe424597ca1ca452b299861e49f1b # via # gcp-releasetool # twine -markupsafe==2.1.1 \ - --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \ - --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \ - --hash=sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5 \ - --hash=sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7 \ - --hash=sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a \ - --hash=sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603 \ - --hash=sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1 \ - --hash=sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135 \ - --hash=sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247 \ - --hash=sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6 \ - --hash=sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601 \ - --hash=sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77 \ - --hash=sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02 \ - --hash=sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e \ - --hash=sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63 \ - --hash=sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f \ - --hash=sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980 \ - --hash=sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b \ - --hash=sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812 \ - --hash=sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff \ - --hash=sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96 \ - --hash=sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1 \ - --hash=sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925 \ - --hash=sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a \ - --hash=sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6 \ - --hash=sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e \ - --hash=sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f \ - --hash=sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4 \ - --hash=sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f \ - --hash=sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3 \ - --hash=sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c \ - --hash=sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a \ - --hash=sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417 \ - --hash=sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a \ - --hash=sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a \ - --hash=sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37 \ - --hash=sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452 \ - --hash=sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933 \ - --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ - --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 +markdown-it-py==3.0.0 \ + --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \ + --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb + # via rich +markupsafe==2.1.5 \ + --hash=sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf \ + --hash=sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff \ + --hash=sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f \ + --hash=sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3 \ + --hash=sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532 \ + --hash=sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f \ + --hash=sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617 \ + --hash=sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df \ + --hash=sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4 \ + --hash=sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906 \ + --hash=sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f \ + --hash=sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4 \ + --hash=sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8 \ + --hash=sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371 \ + --hash=sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2 \ + --hash=sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465 \ + --hash=sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52 \ + --hash=sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6 \ + --hash=sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169 \ + --hash=sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad \ + --hash=sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2 \ + --hash=sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0 \ + --hash=sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029 \ + --hash=sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f \ + --hash=sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a \ + --hash=sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced \ + --hash=sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5 \ + --hash=sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c \ + --hash=sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf \ + --hash=sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9 \ + --hash=sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb \ + --hash=sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad \ + --hash=sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3 \ + --hash=sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1 \ + --hash=sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46 \ + --hash=sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc \ + --hash=sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a \ + --hash=sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee \ + --hash=sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900 \ + --hash=sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5 \ + --hash=sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea \ + --hash=sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f \ + --hash=sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5 \ + --hash=sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e \ + --hash=sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a \ + --hash=sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f \ + --hash=sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50 \ + --hash=sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a \ + --hash=sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b \ + --hash=sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4 \ + --hash=sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff \ + --hash=sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2 \ + --hash=sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46 \ + --hash=sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b \ + --hash=sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf \ + --hash=sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5 \ + --hash=sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5 \ + --hash=sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab \ + --hash=sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd \ + --hash=sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68 # via jinja2 -more-itertools==9.0.0 \ - --hash=sha256:250e83d7e81d0c87ca6bd942e6aeab8cc9daa6096d12c5308f3f92fa5e5c1f41 \ - --hash=sha256:5a6257e40878ef0520b1803990e3e22303a41b5714006c32a3fd8304b26ea1ab - # via jaraco-classes -nox==2022.8.7 \ - --hash=sha256:1b894940551dc5c389f9271d197ca5d655d40bdc6ccf93ed6880e4042760a34b \ - --hash=sha256:96cca88779e08282a699d672258ec01eb7c792d35bbbf538c723172bce23212c +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba + # via markdown-it-py +more-itertools==10.3.0 \ + --hash=sha256:e5d93ef411224fbcef366a6e8ddc4c5781bc6359d43412a65dd5964e46111463 \ + --hash=sha256:ea6a02e24a9161e51faad17a8782b92a0df82c12c1c8886fec7f0c3fa1a1b320 + # via + # jaraco-classes + # jaraco-functools +nh3==0.2.18 \ + --hash=sha256:0411beb0589eacb6734f28d5497ca2ed379eafab8ad8c84b31bb5c34072b7164 \ + --hash=sha256:14c5a72e9fe82aea5fe3072116ad4661af5cf8e8ff8fc5ad3450f123e4925e86 \ + --hash=sha256:19aaba96e0f795bd0a6c56291495ff59364f4300d4a39b29a0abc9cb3774a84b \ + --hash=sha256:34c03fa78e328c691f982b7c03d4423bdfd7da69cd707fe572f544cf74ac23ad \ + --hash=sha256:36c95d4b70530b320b365659bb5034341316e6a9b30f0b25fa9c9eff4c27a204 \ + --hash=sha256:3a157ab149e591bb638a55c8c6bcb8cdb559c8b12c13a8affaba6cedfe51713a \ + --hash=sha256:42c64511469005058cd17cc1537578eac40ae9f7200bedcfd1fc1a05f4f8c200 \ + --hash=sha256:5f36b271dae35c465ef5e9090e1fdaba4a60a56f0bb0ba03e0932a66f28b9189 \ + --hash=sha256:6955369e4d9f48f41e3f238a9e60f9410645db7e07435e62c6a9ea6135a4907f \ + --hash=sha256:7b7c2a3c9eb1a827d42539aa64091640bd275b81e097cd1d8d82ef91ffa2e811 \ + --hash=sha256:8ce0f819d2f1933953fca255db2471ad58184a60508f03e6285e5114b6254844 \ + --hash=sha256:94a166927e53972a9698af9542ace4e38b9de50c34352b962f4d9a7d4c927af4 \ + --hash=sha256:a7f1b5b2c15866f2db413a3649a8fe4fd7b428ae58be2c0f6bca5eefd53ca2be \ + --hash=sha256:c8b3a1cebcba9b3669ed1a84cc65bf005728d2f0bc1ed2a6594a992e817f3a50 \ + --hash=sha256:de3ceed6e661954871d6cd78b410213bdcb136f79aafe22aa7182e028b8c7307 \ + --hash=sha256:f0eca9ca8628dbb4e916ae2491d72957fdd35f7a5d326b7032a345f111ac07fe + # via readme-renderer +nox==2024.4.15 \ + --hash=sha256:6492236efa15a460ecb98e7b67562a28b70da006ab0be164e8821177577c0565 \ + --hash=sha256:ecf6700199cdfa9e5ea0a41ff5e6ef4641d09508eda6edb89d9987864115817f # via -r requirements.in -packaging==21.3 \ - --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ - --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 +packaging==24.1 \ + --hash=sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002 \ + --hash=sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124 # via # gcp-releasetool # nox -pkginfo==1.8.3 \ - --hash=sha256:848865108ec99d4901b2f7e84058b6e7660aae8ae10164e015a6dcf5b242a594 \ - --hash=sha256:a84da4318dd86f870a9447a8c98340aa06216bfc6f2b7bdc4b8766984ae1867c +pkginfo==1.10.0 \ + --hash=sha256:5df73835398d10db79f8eecd5cd86b1f6d29317589ea70796994d49399af6297 \ + --hash=sha256:889a6da2ed7ffc58ab5b900d888ddce90bce912f2d2de1dc1c26f4cb9fe65097 # via twine -platformdirs==2.5.4 \ - --hash=sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7 \ - --hash=sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10 +platformdirs==4.2.2 \ + --hash=sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee \ + --hash=sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3 # via virtualenv -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 +proto-plus==1.24.0 \ + --hash=sha256:30b72a5ecafe4406b0d339db35b56c4059064e69227b8c3bda7462397f966445 \ + --hash=sha256:402576830425e5f6ce4c2a6702400ac79897dab0b4343821aa5188b0fab81a12 + # via google-api-core +protobuf==5.27.2 \ + --hash=sha256:0e341109c609749d501986b835f667c6e1e24531096cff9d34ae411595e26505 \ + --hash=sha256:176c12b1f1c880bf7a76d9f7c75822b6a2bc3db2d28baa4d300e8ce4cde7409b \ + --hash=sha256:354d84fac2b0d76062e9b3221f4abbbacdfd2a4d8af36bab0474f3a0bb30ab38 \ + --hash=sha256:4fadd8d83e1992eed0248bc50a4a6361dc31bcccc84388c54c86e530b7f58863 \ + --hash=sha256:54330f07e4949d09614707c48b06d1a22f8ffb5763c159efd5c0928326a91470 \ + --hash=sha256:610e700f02469c4a997e58e328cac6f305f649826853813177e6290416e846c6 \ + --hash=sha256:7fc3add9e6003e026da5fc9e59b131b8f22b428b991ccd53e2af8071687b4fce \ + --hash=sha256:9e8f199bf7f97bd7ecebffcae45ebf9527603549b2b562df0fbc6d4d688f14ca \ + --hash=sha256:a109916aaac42bff84702fb5187f3edadbc7c97fc2c99c5ff81dd15dcce0d1e5 \ + --hash=sha256:b848dbe1d57ed7c191dfc4ea64b8b004a3f9ece4bf4d0d80a367b76df20bf36e \ + --hash=sha256:f3ecdef226b9af856075f28227ff2c90ce3a594d092c39bee5513573f25e2714 # via # gcp-docuploader # gcp-releasetool # google-api-core -py==1.11.0 \ - --hash=sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719 \ - --hash=sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378 - # via nox -pyasn1==0.4.8 \ - --hash=sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d \ - --hash=sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba + # googleapis-common-protos + # proto-plus +pyasn1==0.6.0 \ + --hash=sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c \ + --hash=sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473 # via # pyasn1-modules # rsa -pyasn1-modules==0.2.8 \ - --hash=sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e \ - --hash=sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74 +pyasn1-modules==0.4.0 \ + --hash=sha256:831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6 \ + --hash=sha256:be04f15b66c206eed667e0bb5ab27e2b1855ea54a842e5037738099e8ca4ae0b # via google-auth -pycparser==2.21 \ - --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ - --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 +pycparser==2.22 \ + --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \ + --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc # via cffi -pygments==2.13.0 \ - --hash=sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1 \ - --hash=sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42 +pygments==2.18.0 \ + --hash=sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199 \ + --hash=sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a # via # readme-renderer # rich -pyjwt==2.6.0 \ - --hash=sha256:69285c7e31fc44f68a1feb309e948e0df53259d579295e6cfe2b1792329f05fd \ - --hash=sha256:d83c3d892a77bbb74d3e1a2cfa90afaadb60945205d1095d9221f04466f64c14 +pyjwt==2.8.0 \ + --hash=sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de \ + --hash=sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320 # via gcp-releasetool -pyparsing==3.0.9 \ - --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ - --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc - # via packaging -pyperclip==1.8.2 \ - --hash=sha256:105254a8b04934f0bc84e9c24eb360a591aaf6535c9def5f29d92af107a9bf57 +pyperclip==1.9.0 \ + --hash=sha256:b7de0142ddc81bfc5c7507eea19da920b92252b548b96186caf94a5e2527d310 # via gcp-releasetool -python-dateutil==2.8.2 \ - --hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \ - --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 +python-dateutil==2.9.0.post0 \ + --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ + --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 # via gcp-releasetool -readme-renderer==37.3 \ - --hash=sha256:cd653186dfc73055656f090f227f5cb22a046d7f71a841dfa305f55c9a513273 \ - --hash=sha256:f67a16caedfa71eef48a31b39708637a6f4664c4394801a7b0d6432d13907343 +readme-renderer==44.0 \ + --hash=sha256:2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151 \ + --hash=sha256:8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1 # via twine -requests==2.28.1 \ - --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 \ - --hash=sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349 +requests==2.32.3 \ + --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ + --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 # via # gcp-releasetool # google-api-core # google-cloud-storage # requests-toolbelt # twine -requests-toolbelt==0.10.1 \ - --hash=sha256:18565aa58116d9951ac39baa288d3adb5b3ff975c4f25eee78555d89e8f247f7 \ - --hash=sha256:62e09f7ff5ccbda92772a29f394a49c3ad6cb181d568b1337626b2abb628a63d +requests-toolbelt==1.0.0 \ + --hash=sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6 \ + --hash=sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06 # via twine rfc3986==2.0.0 \ --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \ --hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c # via twine -rich==12.6.0 \ - --hash=sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e \ - --hash=sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0 +rich==13.7.1 \ + --hash=sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222 \ + --hash=sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432 # via twine rsa==4.9 \ --hash=sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7 \ @@ -461,43 +497,41 @@ six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via - # bleach # gcp-docuploader - # google-auth # python-dateutil -twine==4.0.1 \ - --hash=sha256:42026c18e394eac3e06693ee52010baa5313e4811d5a11050e7d48436cf41b9e \ - --hash=sha256:96b1cf12f7ae611a4a40b6ae8e9570215daff0611828f5fe1f37a16255ab24a0 +tomli==2.0.1 \ + --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ + --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f + # via nox +twine==5.1.1 \ + --hash=sha256:215dbe7b4b94c2c50a7315c0275d2258399280fbb7d04182c7e55e24b5f93997 \ + --hash=sha256:9aa0825139c02b3434d913545c7b847a21c835e11597f5255842d457da2322db # via -r requirements.in -typing-extensions==4.4.0 \ - --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ - --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e +typing-extensions==4.12.2 \ + --hash=sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d \ + --hash=sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8 # via -r requirements.in -urllib3==1.26.12 \ - --hash=sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e \ - --hash=sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997 +urllib3==2.2.2 \ + --hash=sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472 \ + --hash=sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168 # via # requests # twine -virtualenv==20.16.7 \ - --hash=sha256:8691e3ff9387f743e00f6bb20f70121f5e4f596cae754531f2b3b3a1b1ac696e \ - --hash=sha256:efd66b00386fdb7dbe4822d172303f40cd05e50e01740b19ea42425cbe653e29 +virtualenv==20.26.3 \ + --hash=sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a \ + --hash=sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589 # via nox -webencodings==0.5.1 \ - --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \ - --hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923 - # via bleach -wheel==0.38.4 \ - --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ - --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 +wheel==0.43.0 \ + --hash=sha256:465ef92c69fa5c5da2d1cf8ac40559a8c940886afcef87dcf14b9470862f1d85 \ + --hash=sha256:55c570405f142630c6b9f72fe09d9b67cf1477fcf543ae5b8dcb1f5b7377da81 # via -r requirements.in -zipp==3.10.0 \ - --hash=sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1 \ - --hash=sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8 +zipp==3.19.2 \ + --hash=sha256:bf1dcf6450f873a13e952a29504887c89e6de7506209e5b1bcc3460135d4de19 \ + --hash=sha256:f091755f667055f2d02b32c53771a7a6c8b47e1fdbc4b72a8b9072b3eef8015c # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: -setuptools==65.5.1 \ - --hash=sha256:d0b9a8433464d5800cbe05094acf5c6d52a91bfac9b52bcfc4d41382be5d5d31 \ - --hash=sha256:e197a19aa8ec9722928f2206f8de752def0e4c9fc6953527360d1c36d94ddb2f +setuptools==70.2.0 \ + --hash=sha256:b8b8060bb426838fbe942479c90296ce976249451118ef566a5a0b7d8b78fb05 \ + --hash=sha256:bd63e505105011b25c3c11f753f7e3b8465ea739efddaccef8f0efac2137bac1 # via -r requirements.in diff --git a/.kokoro/samples/python3.12/common.cfg b/.kokoro/samples/python3.12/common.cfg new file mode 100644 index 0000000..1af854b --- /dev/null +++ b/.kokoro/samples/python3.12/common.cfg @@ -0,0 +1,40 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Build logs will be here +action { + define_artifacts { + regex: "**/*sponge_log.xml" + } +} + +# Specify which tests to run +env_vars: { + key: "RUN_TESTS_SESSION" + value: "py-3.12" +} + +# Declare build specific Cloud project. +env_vars: { + key: "BUILD_SPECIFIC_GCLOUD_PROJECT" + value: "python-docs-samples-tests-312" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-audit-log/.kokoro/test-samples.sh" +} + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker" +} + +# Download secrets for samples +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples" + +# Download trampoline resources. +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" + +# Use the trampoline script to run in docker. +build_file: "python-audit-log/.kokoro/trampoline_v2.sh" \ No newline at end of file diff --git a/.kokoro/samples/python3.12/continuous.cfg b/.kokoro/samples/python3.12/continuous.cfg new file mode 100644 index 0000000..a1c8d97 --- /dev/null +++ b/.kokoro/samples/python3.12/continuous.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} \ No newline at end of file diff --git a/.kokoro/samples/python3.12/periodic-head.cfg b/.kokoro/samples/python3.12/periodic-head.cfg new file mode 100644 index 0000000..ff417c5 --- /dev/null +++ b/.kokoro/samples/python3.12/periodic-head.cfg @@ -0,0 +1,11 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-audit-log/.kokoro/test-samples-against-head.sh" +} diff --git a/.kokoro/samples/python3.12/periodic.cfg b/.kokoro/samples/python3.12/periodic.cfg new file mode 100644 index 0000000..71cd1e5 --- /dev/null +++ b/.kokoro/samples/python3.12/periodic.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "False" +} diff --git a/.kokoro/samples/python3.12/presubmit.cfg b/.kokoro/samples/python3.12/presubmit.cfg new file mode 100644 index 0000000..a1c8d97 --- /dev/null +++ b/.kokoro/samples/python3.12/presubmit.cfg @@ -0,0 +1,6 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} \ No newline at end of file diff --git a/.kokoro/test-samples-against-head.sh b/.kokoro/test-samples-against-head.sh index ba3a707..e9d8bd7 100755 --- a/.kokoro/test-samples-against-head.sh +++ b/.kokoro/test-samples-against-head.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2020 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/.kokoro/test-samples-impl.sh b/.kokoro/test-samples-impl.sh index 2c6500c..55910c8 100755 --- a/.kokoro/test-samples-impl.sh +++ b/.kokoro/test-samples-impl.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2021 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/.kokoro/test-samples.sh b/.kokoro/test-samples.sh index 11c042d..7933d82 100755 --- a/.kokoro/test-samples.sh +++ b/.kokoro/test-samples.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2020 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/.kokoro/trampoline.sh b/.kokoro/trampoline.sh index f39236e..48f7969 100755 --- a/.kokoro/trampoline.sh +++ b/.kokoro/trampoline.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2017 Google Inc. +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/.kokoro/trampoline_v2.sh b/.kokoro/trampoline_v2.sh index 4af6cdc..35fa529 100755 --- a/.kokoro/trampoline_v2.sh +++ b/.kokoro/trampoline_v2.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright 2020 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/CHANGELOG.md b/CHANGELOG.md index d13d54c..f6ce8e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,23 @@ # Changelog +## [0.3.0](https://github.com/googleapis/python-audit-log/compare/v0.2.5...v0.3.0) (2024-08-15) + + +### Features + +* Add `google/cloud/audit/bigquery_audit_metadata_pb2.py` ([c6efc56](https://github.com/googleapis/python-audit-log/commit/c6efc56eec9627ecf1e139cc33d5815937f04dc6)) +* Add PolicyViolation. this will only be present when access is denied due to Organization Policy [fc5be6f](https://github.com/googleapis/googleapis/commit/fc5be6f850e7989e912b40c6b79306c6dc9655bd) ([c6efc56](https://github.com/googleapis/python-audit-log/commit/c6efc56eec9627ecf1e139cc33d5815937f04dc6)) +* Add support for Python 3.12 ([#113](https://github.com/googleapis/python-audit-log/issues/113)) ([08b0bca](https://github.com/googleapis/python-audit-log/commit/08b0bca0ee634d65bba18c7de102063be17d0958)) +* Add the principal field to the ServiceAccountDelegationInfo [ba89dac](https://github.com/googleapis/googleapis/commit/ba89dace27923254d96ab8339b831dc996e2112f) ([c6efc56](https://github.com/googleapis/python-audit-log/commit/c6efc56eec9627ecf1e139cc33d5815937f04dc6)) +* Introduce compatibility with native namespace packages ([#117](https://github.com/googleapis/python-audit-log/issues/117)) ([9007e8a](https://github.com/googleapis/python-audit-log/commit/9007e8af7f5300f866f42035c36a9d3fe36ef117)) +* Update AuditLog proto to include all new changes in Audit Logging [40292fc](https://github.com/googleapis/googleapis/commit/40292fc8f271f3b8708f9c91c85d7240200893a6) ([c6efc56](https://github.com/googleapis/python-audit-log/commit/c6efc56eec9627ecf1e139cc33d5815937f04dc6)) + + +### Bug Fixes + +* **deps:** Require protobuf>=3.20.2, protobuf<6 ([bf1434a](https://github.com/googleapis/python-audit-log/commit/bf1434a7f4c0d03767c6f943de898d5562e874b1)) +* Regenerate pb2 files for compatibility with protobuf 5.x ([bf1434a](https://github.com/googleapis/python-audit-log/commit/bf1434a7f4c0d03767c6f943de898d5562e874b1)) + ## [0.2.5](https://github.com/googleapis/python-audit-log/compare/v0.2.4...v0.2.5) (2023-01-07) diff --git a/google/cloud/audit/audit_log.proto b/google/cloud/audit/audit_log.proto index 66ea021..2a65ca6 100644 --- a/google/cloud/audit/audit_log.proto +++ b/google/cloud/audit/audit_log.proto @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ syntax = "proto3"; package google.cloud.audit; +import "google/api/field_behavior.proto"; import "google/protobuf/any.proto"; import "google/protobuf/struct.proto"; import "google/rpc/context/attribute_context.proto"; @@ -30,23 +31,23 @@ option java_package = "com.google.cloud.audit"; // Common audit log format for Google Cloud Platform API operations. message AuditLog { // The name of the API service performing the operation. For example, - // `"datastore.googleapis.com"`. + // `"compute.googleapis.com"`. string service_name = 7; // The name of the service method or operation. // For API calls, this should be the name of the API method. // For example, // - // "google.datastore.v1.Datastore.RunQuery" - // "google.logging.v1.LoggingService.DeleteLog" + // "google.cloud.bigquery.v2.TableService.InsertTable" + // "google.logging.v2.ConfigServiceV2.CreateSink" string method_name = 8; // The resource or collection that is the target of the operation. // The name is a scheme-less URI, not including the API service name. // For example: // - // "shelves/SHELF_ID/books" - // "shelves/SHELF_ID/books/BOOK_ID" + // "projects/PROJECT_ID/zones/us-central1-a/instances" + // "projects/PROJECT_ID/datasets/DATASET_ID" string resource_name = 11; // The resource location information. @@ -76,6 +77,11 @@ message AuditLog { // one AuthorizationInfo element for each {resource, permission} tuple. repeated AuthorizationInfo authorization_info = 9; + // Indicates the policy violations for this request. If the request + // is denied by the policy, violation information will be logged + // here. + PolicyViolationInfo policy_violation_info = 25; + // Metadata about the operation. RequestMetadata request_metadata = 4; @@ -99,18 +105,20 @@ message AuditLog { // information associated with the current audited event. google.protobuf.Struct metadata = 18; - // Deprecated, use `metadata` field instead. + // Deprecated. Use the `metadata` field instead. // Other service-specific data about the request, response, and other // activities. - google.protobuf.Any service_data = 15; + google.protobuf.Any service_data = 15 [deprecated = true]; } // Authentication information for the operation. message AuthenticationInfo { // The email address of the authenticated user (or service account on behalf - // of third party principal) making the request. For privacy reasons, the - // principal email address is redacted for all read-only operations that fail - // with a "permission denied" error. + // of third party principal) making the request. For third party identity + // callers, the `principal_subject` field is populated instead of this field. + // For privacy reasons, the principal email address is sometimes redacted. + // For more information, see [Caller identities in audit + // logs](https://cloud.google.com/logging/docs/audit#user-id). string principal_email = 1; // The authority selector specified by the requestor, if any. @@ -144,9 +152,12 @@ message AuthenticationInfo { // Authorization information for the operation. message AuthorizationInfo { - // The resource being accessed, as a REST-style string. For example: + // The resource being accessed, as a REST-style or cloud resource string. + // For example: // // bigquery.googleapis.com/projects/PROJECTID/datasets/DATASETID + // or + // projects/PROJECTID/datasets/DATASETID string resource = 1; // The required IAM permission. @@ -168,14 +179,16 @@ message AuthorizationInfo { // Metadata about the request. message RequestMetadata { // The IP address of the caller. - // For caller from internet, this will be public IPv4 or IPv6 address. - // For caller from a Compute Engine VM with external IP address, this - // will be the VM's external IP address. For caller from a Compute - // Engine VM without external IP address, if the VM is in the same - // organization (or project) as the accessed resource, `caller_ip` will - // be the VM's internal IPv4 address, otherwise the `caller_ip` will be - // redacted to "gce-internal-ip". - // See https://cloud.google.com/compute/docs/vpc/ for more information. + // For a caller from the internet, this will be the public IPv4 or IPv6 + // address. For calls made from inside Google's internal production network + // from one GCP service to another, `caller_ip` will be redacted to "private". + // For a caller from a Compute Engine VM with a external IP address, + // `caller_ip` will be the VM's external IP address. For a caller from a + // Compute Engine VM without a external IP address, if the VM is in the same + // organization (or project) as the accessed resource, `caller_ip` will be the + // VM's internal IPv4 address, otherwise `caller_ip` will be redacted to + // "gce-internal-ip". See https://cloud.google.com/compute/docs/vpc/ for more + // information. string caller_ip = 1; // The user agent of the caller. @@ -258,6 +271,14 @@ message ServiceAccountDelegationInfo { google.protobuf.Struct third_party_claims = 1; } + // A string representing the principal_subject associated with the identity. + // For most identities, the format will be + // `principal://iam.googleapis.com/{identity pool name}/subject/{subject)` + // except for some GKE identities (GKE_WORKLOAD, FREEFORM, GKE_HUB_WORKLOAD) + // that are still in the legacy format `serviceAccount:{identity pool + // name}[{subject}]` + string principal_subject = 3; + // Entity that creates credentials for service account and assumes its // identity for authentication. oneof Authority { @@ -268,3 +289,65 @@ message ServiceAccountDelegationInfo { ThirdPartyPrincipal third_party_principal = 2; } } + +// Information related to policy violations for this request. +message PolicyViolationInfo { + // Indicates the orgpolicy violations for this resource. + OrgPolicyViolationInfo org_policy_violation_info = 1; +} + +// Represents OrgPolicy Violation information. +message OrgPolicyViolationInfo { + // Optional. Resource payload that is currently in scope and is subjected to orgpolicy + // conditions. This payload may be the subset of the actual Resource that may + // come in the request. This payload should not contain any core content. + google.protobuf.Struct payload = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Resource type that the orgpolicy is checked against. + // Example: compute.googleapis.com/Instance, store.googleapis.com/bucket + string resource_type = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Tags referenced on the resource at the time of evaluation. These also + // include the federated tags, if they are supplied in the CheckOrgPolicy + // or CheckCustomConstraints Requests. + // + // Optional field as of now. These tags are the Cloud tags that are + // available on the resource during the policy evaluation and will + // be available as part of the OrgPolicy check response for logging purposes. + map resource_tags = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Policy violations + repeated ViolationInfo violation_info = 4 [(google.api.field_behavior) = OPTIONAL]; +} + +// Provides information about the Policy violation info for this request. +message ViolationInfo { + // Policy Type enum + enum PolicyType { + // Default value. This value should not be used. + POLICY_TYPE_UNSPECIFIED = 0; + + // Indicates boolean policy constraint + BOOLEAN_CONSTRAINT = 1; + + // Indicates list policy constraint + LIST_CONSTRAINT = 2; + + // Indicates custom policy constraint + CUSTOM_CONSTRAINT = 3; + } + + // Optional. Constraint name + string constraint = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Error message that policy is indicating. + string error_message = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Value that is being checked for the policy. + // This could be in encrypted form (if pii sensitive). + // This field will only be emitted in LIST_POLICY types + string checked_value = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Indicates the type of the policy. + PolicyType policy_type = 4 [(google.api.field_behavior) = OPTIONAL]; +} \ No newline at end of file diff --git a/google/cloud/audit/audit_log_pb2.py b/google/cloud/audit/audit_log_pb2.py index 91b61e1..4072696 100644 --- a/google/cloud/audit/audit_log_pb2.py +++ b/google/cloud/audit/audit_log_pb2.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright 2020 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -19,15 +19,15 @@ """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() +from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2 from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 from google.rpc.context import ( @@ -37,128 +37,71 @@ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( - b'\n"google/cloud/audit/audit_log.proto\x12\x12google.cloud.audit\x1a\x19google/protobuf/any.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a*google/rpc/context/attribute_context.proto\x1a\x17google/rpc/status.proto"\xfa\x04\n\x08\x41uditLog\x12\x14\n\x0cservice_name\x18\x07 \x01(\t\x12\x13\n\x0bmethod_name\x18\x08 \x01(\t\x12\x15\n\rresource_name\x18\x0b \x01(\t\x12?\n\x11resource_location\x18\x14 \x01(\x0b\x32$.google.cloud.audit.ResourceLocation\x12\x38\n\x17resource_original_state\x18\x13 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x1a\n\x12num_response_items\x18\x0c \x01(\x03\x12"\n\x06status\x18\x02 \x01(\x0b\x32\x12.google.rpc.Status\x12\x43\n\x13\x61uthentication_info\x18\x03 \x01(\x0b\x32&.google.cloud.audit.AuthenticationInfo\x12\x41\n\x12\x61uthorization_info\x18\t \x03(\x0b\x32%.google.cloud.audit.AuthorizationInfo\x12=\n\x10request_metadata\x18\x04 \x01(\x0b\x32#.google.cloud.audit.RequestMetadata\x12(\n\x07request\x18\x10 \x01(\x0b\x32\x17.google.protobuf.Struct\x12)\n\x08response\x18\x11 \x01(\x0b\x32\x17.google.protobuf.Struct\x12)\n\x08metadata\x18\x12 \x01(\x0b\x32\x17.google.protobuf.Struct\x12*\n\x0cservice_data\x18\x0f \x01(\x0b\x32\x14.google.protobuf.Any"\x99\x02\n\x12\x41uthenticationInfo\x12\x17\n\x0fprincipal_email\x18\x01 \x01(\t\x12\x1a\n\x12\x61uthority_selector\x18\x02 \x01(\t\x12\x36\n\x15third_party_principal\x18\x04 \x01(\x0b\x32\x17.google.protobuf.Struct\x12 \n\x18service_account_key_name\x18\x05 \x01(\t\x12Y\n\x1fservice_account_delegation_info\x18\x06 \x03(\x0b\x32\x30.google.cloud.audit.ServiceAccountDelegationInfo\x12\x19\n\x11principal_subject\x18\x08 \x01(\t"\x96\x01\n\x11\x41uthorizationInfo\x12\x10\n\x08resource\x18\x01 \x01(\t\x12\x12\n\npermission\x18\x02 \x01(\t\x12\x0f\n\x07granted\x18\x03 \x01(\x08\x12J\n\x13resource_attributes\x18\x05 \x01(\x0b\x32-.google.rpc.context.AttributeContext.Resource"\xf5\x01\n\x0fRequestMetadata\x12\x11\n\tcaller_ip\x18\x01 \x01(\t\x12"\n\x1a\x63\x61ller_supplied_user_agent\x18\x02 \x01(\t\x12\x16\n\x0e\x63\x61ller_network\x18\x03 \x01(\t\x12H\n\x12request_attributes\x18\x07 \x01(\x0b\x32,.google.rpc.context.AttributeContext.Request\x12I\n\x16\x64\x65stination_attributes\x18\x08 \x01(\x0b\x32).google.rpc.context.AttributeContext.Peer"I\n\x10ResourceLocation\x12\x19\n\x11\x63urrent_locations\x18\x01 \x03(\t\x12\x1a\n\x12original_locations\x18\x02 \x03(\t"\xa8\x03\n\x1cServiceAccountDelegationInfo\x12\x65\n\x15\x66irst_party_principal\x18\x01 \x01(\x0b\x32\x44.google.cloud.audit.ServiceAccountDelegationInfo.FirstPartyPrincipalH\x00\x12\x65\n\x15third_party_principal\x18\x02 \x01(\x0b\x32\x44.google.cloud.audit.ServiceAccountDelegationInfo.ThirdPartyPrincipalH\x00\x1a\x61\n\x13\x46irstPartyPrincipal\x12\x17\n\x0fprincipal_email\x18\x01 \x01(\t\x12\x31\n\x10service_metadata\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x1aJ\n\x13ThirdPartyPrincipal\x12\x33\n\x12third_party_claims\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\x0b\n\tAuthorityBe\n\x16\x63om.google.cloud.auditB\rAuditLogProtoP\x01Z7google.golang.org/genproto/googleapis/cloud/audit;audit\xf8\x01\x01\x62\x06proto3' + b'\n"google/cloud/audit/audit_log.proto\x12\x12google.cloud.audit\x1a\x1fgoogle/api/field_behavior.proto\x1a\x19google/protobuf/any.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a*google/rpc/context/attribute_context.proto\x1a\x17google/rpc/status.proto"\xc6\x05\n\x08\x41uditLog\x12\x14\n\x0cservice_name\x18\x07 \x01(\t\x12\x13\n\x0bmethod_name\x18\x08 \x01(\t\x12\x15\n\rresource_name\x18\x0b \x01(\t\x12?\n\x11resource_location\x18\x14 \x01(\x0b\x32$.google.cloud.audit.ResourceLocation\x12\x38\n\x17resource_original_state\x18\x13 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x1a\n\x12num_response_items\x18\x0c \x01(\x03\x12"\n\x06status\x18\x02 \x01(\x0b\x32\x12.google.rpc.Status\x12\x43\n\x13\x61uthentication_info\x18\x03 \x01(\x0b\x32&.google.cloud.audit.AuthenticationInfo\x12\x41\n\x12\x61uthorization_info\x18\t \x03(\x0b\x32%.google.cloud.audit.AuthorizationInfo\x12\x46\n\x15policy_violation_info\x18\x19 \x01(\x0b\x32\'.google.cloud.audit.PolicyViolationInfo\x12=\n\x10request_metadata\x18\x04 \x01(\x0b\x32#.google.cloud.audit.RequestMetadata\x12(\n\x07request\x18\x10 \x01(\x0b\x32\x17.google.protobuf.Struct\x12)\n\x08response\x18\x11 \x01(\x0b\x32\x17.google.protobuf.Struct\x12)\n\x08metadata\x18\x12 \x01(\x0b\x32\x17.google.protobuf.Struct\x12.\n\x0cservice_data\x18\x0f \x01(\x0b\x32\x14.google.protobuf.AnyB\x02\x18\x01"\x99\x02\n\x12\x41uthenticationInfo\x12\x17\n\x0fprincipal_email\x18\x01 \x01(\t\x12\x1a\n\x12\x61uthority_selector\x18\x02 \x01(\t\x12\x36\n\x15third_party_principal\x18\x04 \x01(\x0b\x32\x17.google.protobuf.Struct\x12 \n\x18service_account_key_name\x18\x05 \x01(\t\x12Y\n\x1fservice_account_delegation_info\x18\x06 \x03(\x0b\x32\x30.google.cloud.audit.ServiceAccountDelegationInfo\x12\x19\n\x11principal_subject\x18\x08 \x01(\t"\x96\x01\n\x11\x41uthorizationInfo\x12\x10\n\x08resource\x18\x01 \x01(\t\x12\x12\n\npermission\x18\x02 \x01(\t\x12\x0f\n\x07granted\x18\x03 \x01(\x08\x12J\n\x13resource_attributes\x18\x05 \x01(\x0b\x32-.google.rpc.context.AttributeContext.Resource"\xf5\x01\n\x0fRequestMetadata\x12\x11\n\tcaller_ip\x18\x01 \x01(\t\x12"\n\x1a\x63\x61ller_supplied_user_agent\x18\x02 \x01(\t\x12\x16\n\x0e\x63\x61ller_network\x18\x03 \x01(\t\x12H\n\x12request_attributes\x18\x07 \x01(\x0b\x32,.google.rpc.context.AttributeContext.Request\x12I\n\x16\x64\x65stination_attributes\x18\x08 \x01(\x0b\x32).google.rpc.context.AttributeContext.Peer"I\n\x10ResourceLocation\x12\x19\n\x11\x63urrent_locations\x18\x01 \x03(\t\x12\x1a\n\x12original_locations\x18\x02 \x03(\t"\xc3\x03\n\x1cServiceAccountDelegationInfo\x12\x19\n\x11principal_subject\x18\x03 \x01(\t\x12\x65\n\x15\x66irst_party_principal\x18\x01 \x01(\x0b\x32\x44.google.cloud.audit.ServiceAccountDelegationInfo.FirstPartyPrincipalH\x00\x12\x65\n\x15third_party_principal\x18\x02 \x01(\x0b\x32\x44.google.cloud.audit.ServiceAccountDelegationInfo.ThirdPartyPrincipalH\x00\x1a\x61\n\x13\x46irstPartyPrincipal\x12\x17\n\x0fprincipal_email\x18\x01 \x01(\t\x12\x31\n\x10service_metadata\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x1aJ\n\x13ThirdPartyPrincipal\x12\x33\n\x12third_party_claims\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\x0b\n\tAuthority"d\n\x13PolicyViolationInfo\x12M\n\x19org_policy_violation_info\x18\x01 \x01(\x0b\x32*.google.cloud.audit.OrgPolicyViolationInfo"\xb2\x02\n\x16OrgPolicyViolationInfo\x12-\n\x07payload\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\x03\xe0\x41\x01\x12\x1a\n\rresource_type\x18\x02 \x01(\tB\x03\xe0\x41\x01\x12X\n\rresource_tags\x18\x03 \x03(\x0b\x32<.google.cloud.audit.OrgPolicyViolationInfo.ResourceTagsEntryB\x03\xe0\x41\x01\x12>\n\x0eviolation_info\x18\x04 \x03(\x0b\x32!.google.cloud.audit.ViolationInfoB\x03\xe0\x41\x01\x1a\x33\n\x11ResourceTagsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01"\x97\x02\n\rViolationInfo\x12\x17\n\nconstraint\x18\x01 \x01(\tB\x03\xe0\x41\x01\x12\x1a\n\rerror_message\x18\x02 \x01(\tB\x03\xe0\x41\x01\x12\x1a\n\rchecked_value\x18\x03 \x01(\tB\x03\xe0\x41\x01\x12\x46\n\x0bpolicy_type\x18\x04 \x01(\x0e\x32,.google.cloud.audit.ViolationInfo.PolicyTypeB\x03\xe0\x41\x01"m\n\nPolicyType\x12\x1b\n\x17POLICY_TYPE_UNSPECIFIED\x10\x00\x12\x16\n\x12\x42OOLEAN_CONSTRAINT\x10\x01\x12\x13\n\x0fLIST_CONSTRAINT\x10\x02\x12\x15\n\x11\x43USTOM_CONSTRAINT\x10\x03\x42\x65\n\x16\x63om.google.cloud.auditB\rAuditLogProtoP\x01Z7google.golang.org/genproto/googleapis/cloud/audit;audit\xf8\x01\x01\x62\x06proto3' ) - -_AUDITLOG = DESCRIPTOR.message_types_by_name["AuditLog"] -_AUTHENTICATIONINFO = DESCRIPTOR.message_types_by_name["AuthenticationInfo"] -_AUTHORIZATIONINFO = DESCRIPTOR.message_types_by_name["AuthorizationInfo"] -_REQUESTMETADATA = DESCRIPTOR.message_types_by_name["RequestMetadata"] -_RESOURCELOCATION = DESCRIPTOR.message_types_by_name["ResourceLocation"] -_SERVICEACCOUNTDELEGATIONINFO = DESCRIPTOR.message_types_by_name[ - "ServiceAccountDelegationInfo" -] -_SERVICEACCOUNTDELEGATIONINFO_FIRSTPARTYPRINCIPAL = _SERVICEACCOUNTDELEGATIONINFO.nested_types_by_name[ - "FirstPartyPrincipal" -] -_SERVICEACCOUNTDELEGATIONINFO_THIRDPARTYPRINCIPAL = _SERVICEACCOUNTDELEGATIONINFO.nested_types_by_name[ - "ThirdPartyPrincipal" -] -AuditLog = _reflection.GeneratedProtocolMessageType( - "AuditLog", - (_message.Message,), - { - "DESCRIPTOR": _AUDITLOG, - "__module__": "google.cloud.audit.audit_log_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.audit.AuditLog) - }, -) -_sym_db.RegisterMessage(AuditLog) - -AuthenticationInfo = _reflection.GeneratedProtocolMessageType( - "AuthenticationInfo", - (_message.Message,), - { - "DESCRIPTOR": _AUTHENTICATIONINFO, - "__module__": "google.cloud.audit.audit_log_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.audit.AuthenticationInfo) - }, -) -_sym_db.RegisterMessage(AuthenticationInfo) - -AuthorizationInfo = _reflection.GeneratedProtocolMessageType( - "AuthorizationInfo", - (_message.Message,), - { - "DESCRIPTOR": _AUTHORIZATIONINFO, - "__module__": "google.cloud.audit.audit_log_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.audit.AuthorizationInfo) - }, -) -_sym_db.RegisterMessage(AuthorizationInfo) - -RequestMetadata = _reflection.GeneratedProtocolMessageType( - "RequestMetadata", - (_message.Message,), - { - "DESCRIPTOR": _REQUESTMETADATA, - "__module__": "google.cloud.audit.audit_log_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.audit.RequestMetadata) - }, +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages( + DESCRIPTOR, "google.cloud.audit.audit_log_pb2", _globals ) -_sym_db.RegisterMessage(RequestMetadata) - -ResourceLocation = _reflection.GeneratedProtocolMessageType( - "ResourceLocation", - (_message.Message,), - { - "DESCRIPTOR": _RESOURCELOCATION, - "__module__": "google.cloud.audit.audit_log_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.audit.ResourceLocation) - }, -) -_sym_db.RegisterMessage(ResourceLocation) - -ServiceAccountDelegationInfo = _reflection.GeneratedProtocolMessageType( - "ServiceAccountDelegationInfo", - (_message.Message,), - { - "FirstPartyPrincipal": _reflection.GeneratedProtocolMessageType( - "FirstPartyPrincipal", - (_message.Message,), - { - "DESCRIPTOR": _SERVICEACCOUNTDELEGATIONINFO_FIRSTPARTYPRINCIPAL, - "__module__": "google.cloud.audit.audit_log_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.audit.ServiceAccountDelegationInfo.FirstPartyPrincipal) - }, - ), - "ThirdPartyPrincipal": _reflection.GeneratedProtocolMessageType( - "ThirdPartyPrincipal", - (_message.Message,), - { - "DESCRIPTOR": _SERVICEACCOUNTDELEGATIONINFO_THIRDPARTYPRINCIPAL, - "__module__": "google.cloud.audit.audit_log_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.audit.ServiceAccountDelegationInfo.ThirdPartyPrincipal) - }, - ), - "DESCRIPTOR": _SERVICEACCOUNTDELEGATIONINFO, - "__module__": "google.cloud.audit.audit_log_pb2" - # @@protoc_insertion_point(class_scope:google.cloud.audit.ServiceAccountDelegationInfo) - }, -) -_sym_db.RegisterMessage(ServiceAccountDelegationInfo) -_sym_db.RegisterMessage(ServiceAccountDelegationInfo.FirstPartyPrincipal) -_sym_db.RegisterMessage(ServiceAccountDelegationInfo.ThirdPartyPrincipal) - if _descriptor._USE_C_DESCRIPTORS == False: - DESCRIPTOR._options = None DESCRIPTOR._serialized_options = b"\n\026com.google.cloud.auditB\rAuditLogProtoP\001Z7google.golang.org/genproto/googleapis/cloud/audit;audit\370\001\001" - _AUDITLOG._serialized_start = 185 - _AUDITLOG._serialized_end = 819 - _AUTHENTICATIONINFO._serialized_start = 822 - _AUTHENTICATIONINFO._serialized_end = 1103 - _AUTHORIZATIONINFO._serialized_start = 1106 - _AUTHORIZATIONINFO._serialized_end = 1256 - _REQUESTMETADATA._serialized_start = 1259 - _REQUESTMETADATA._serialized_end = 1504 - _RESOURCELOCATION._serialized_start = 1506 - _RESOURCELOCATION._serialized_end = 1579 - _SERVICEACCOUNTDELEGATIONINFO._serialized_start = 1582 - _SERVICEACCOUNTDELEGATIONINFO._serialized_end = 2006 - _SERVICEACCOUNTDELEGATIONINFO_FIRSTPARTYPRINCIPAL._serialized_start = 1820 - _SERVICEACCOUNTDELEGATIONINFO_FIRSTPARTYPRINCIPAL._serialized_end = 1917 - _SERVICEACCOUNTDELEGATIONINFO_THIRDPARTYPRINCIPAL._serialized_start = 1919 - _SERVICEACCOUNTDELEGATIONINFO_THIRDPARTYPRINCIPAL._serialized_end = 1993 + _AUDITLOG.fields_by_name["service_data"]._options = None + _AUDITLOG.fields_by_name["service_data"]._serialized_options = b"\030\001" + _ORGPOLICYVIOLATIONINFO_RESOURCETAGSENTRY._options = None + _ORGPOLICYVIOLATIONINFO_RESOURCETAGSENTRY._serialized_options = b"8\001" + _ORGPOLICYVIOLATIONINFO.fields_by_name["payload"]._options = None + _ORGPOLICYVIOLATIONINFO.fields_by_name["payload"]._serialized_options = b"\340A\001" + _ORGPOLICYVIOLATIONINFO.fields_by_name["resource_type"]._options = None + _ORGPOLICYVIOLATIONINFO.fields_by_name[ + "resource_type" + ]._serialized_options = b"\340A\001" + _ORGPOLICYVIOLATIONINFO.fields_by_name["resource_tags"]._options = None + _ORGPOLICYVIOLATIONINFO.fields_by_name[ + "resource_tags" + ]._serialized_options = b"\340A\001" + _ORGPOLICYVIOLATIONINFO.fields_by_name["violation_info"]._options = None + _ORGPOLICYVIOLATIONINFO.fields_by_name[ + "violation_info" + ]._serialized_options = b"\340A\001" + _VIOLATIONINFO.fields_by_name["constraint"]._options = None + _VIOLATIONINFO.fields_by_name["constraint"]._serialized_options = b"\340A\001" + _VIOLATIONINFO.fields_by_name["error_message"]._options = None + _VIOLATIONINFO.fields_by_name["error_message"]._serialized_options = b"\340A\001" + _VIOLATIONINFO.fields_by_name["checked_value"]._options = None + _VIOLATIONINFO.fields_by_name["checked_value"]._serialized_options = b"\340A\001" + _VIOLATIONINFO.fields_by_name["policy_type"]._options = None + _VIOLATIONINFO.fields_by_name["policy_type"]._serialized_options = b"\340A\001" + _globals["_AUDITLOG"]._serialized_start = 218 + _globals["_AUDITLOG"]._serialized_end = 928 + _globals["_AUTHENTICATIONINFO"]._serialized_start = 931 + _globals["_AUTHENTICATIONINFO"]._serialized_end = 1212 + _globals["_AUTHORIZATIONINFO"]._serialized_start = 1215 + _globals["_AUTHORIZATIONINFO"]._serialized_end = 1365 + _globals["_REQUESTMETADATA"]._serialized_start = 1368 + _globals["_REQUESTMETADATA"]._serialized_end = 1613 + _globals["_RESOURCELOCATION"]._serialized_start = 1615 + _globals["_RESOURCELOCATION"]._serialized_end = 1688 + _globals["_SERVICEACCOUNTDELEGATIONINFO"]._serialized_start = 1691 + _globals["_SERVICEACCOUNTDELEGATIONINFO"]._serialized_end = 2142 + _globals[ + "_SERVICEACCOUNTDELEGATIONINFO_FIRSTPARTYPRINCIPAL" + ]._serialized_start = 1956 + _globals["_SERVICEACCOUNTDELEGATIONINFO_FIRSTPARTYPRINCIPAL"]._serialized_end = 2053 + _globals[ + "_SERVICEACCOUNTDELEGATIONINFO_THIRDPARTYPRINCIPAL" + ]._serialized_start = 2055 + _globals["_SERVICEACCOUNTDELEGATIONINFO_THIRDPARTYPRINCIPAL"]._serialized_end = 2129 + _globals["_POLICYVIOLATIONINFO"]._serialized_start = 2144 + _globals["_POLICYVIOLATIONINFO"]._serialized_end = 2244 + _globals["_ORGPOLICYVIOLATIONINFO"]._serialized_start = 2247 + _globals["_ORGPOLICYVIOLATIONINFO"]._serialized_end = 2553 + _globals["_ORGPOLICYVIOLATIONINFO_RESOURCETAGSENTRY"]._serialized_start = 2502 + _globals["_ORGPOLICYVIOLATIONINFO_RESOURCETAGSENTRY"]._serialized_end = 2553 + _globals["_VIOLATIONINFO"]._serialized_start = 2556 + _globals["_VIOLATIONINFO"]._serialized_end = 2835 + _globals["_VIOLATIONINFO_POLICYTYPE"]._serialized_start = 2726 + _globals["_VIOLATIONINFO_POLICYTYPE"]._serialized_end = 2835 # @@protoc_insertion_point(module_scope) diff --git a/google/cloud/audit/bigquery_audit_metadata.proto b/google/cloud/audit/bigquery_audit_metadata.proto new file mode 100644 index 0000000..7cf6008 --- /dev/null +++ b/google/cloud/audit/bigquery_audit_metadata.proto @@ -0,0 +1,1334 @@ +// Copyright 2024 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. + +syntax = "proto3"; + +package google.cloud.audit; + +import "google/iam/v1/policy.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/timestamp.proto"; +import "google/rpc/status.proto"; + +option csharp_namespace = "Google.Cloud.Audit"; +option go_package = "google.golang.org/genproto/googleapis/cloud/audit;audit"; +option java_multiple_files = true; +option java_outer_classname = "BigQueryAuditMetadataProto"; +option java_package = "com.google.cloud.audit"; +option objc_class_prefix = "GCA"; +option php_namespace = "Google\\Cloud\\Audit"; + +// Audit log format for BigQuery cloud audit logs metadata. +// +message BigQueryAuditMetadata { + // Job insertion event. + message JobInsertion { + // Describes how the job was inserted. + enum Reason { + // Unknown. + REASON_UNSPECIFIED = 0; + + // Job was inserted using the jobs.insert API. + JOB_INSERT_REQUEST = 1; + + // Job was inserted using the jobs.query RPC. + QUERY_REQUEST = 2; + } + + // Job metadata. + Job job = 1; + + // Describes how the job was inserted. + Reason reason = 2; + } + + // Job state change event. + message JobChange { + // Job state before the job state change. + JobState before = 1; + + // Job state after the job state change. + JobState after = 2; + + // Job metadata. + Job job = 3; + } + + // Job deletion event. + message JobDeletion { + // Describes how the job was deleted. + enum Reason { + // Unknown. + REASON_UNSPECIFIED = 0; + + // Job was deleted using the jobs.delete API. + JOB_DELETE_REQUEST = 1; + } + + // Job URI. + // + // Format: `projects//jobs/`. + string job_name = 1; + + // Describes how the job was deleted. + Reason reason = 2; + } + + // Dataset creation event. + message DatasetCreation { + // Describes how the dataset was created. + enum Reason { + // Unknown. + REASON_UNSPECIFIED = 0; + + // Dataset was created using the datasets.create API. + CREATE = 1; + + // Dataset was created using a query job, e.g., CREATE SCHEMA statement. + QUERY = 2; + } + + // Dataset metadata. + Dataset dataset = 1; + + // Describes how the dataset was created. + Reason reason = 2; + + // The URI of the job that created the dataset. + // Present if the reason is QUERY. + // + // Format: `projects//jobs/`. + string job_name = 3; + } + + // Dataset change event. + message DatasetChange { + // Describes how the dataset was changed. + enum Reason { + // Unknown. + REASON_UNSPECIFIED = 0; + + // Dataset was changed using the datasets.update or datasets.patch API. + UPDATE = 1; + + // Dataset was changed using the SetIamPolicy API. + SET_IAM_POLICY = 2; + + // Dataset was changed using a query job, e.g., ALTER SCHEMA statement. + QUERY = 3; + } + + // Dataset metadata after the change. + Dataset dataset = 1; + + // Describes how the dataset was changed. + Reason reason = 2; + + // The URI of the job that updated the dataset. + // Present if the reason is QUERY. + // + // Format: `projects//jobs/`. + string job_name = 3; + } + + // Dataset deletion event. + message DatasetDeletion { + // Describes how the dataset was deleted. + enum Reason { + // Unknown. + REASON_UNSPECIFIED = 0; + + // Dataset was deleted using the datasets.delete API. + DELETE = 1; + + // Dataset was deleted using a query job, e.g., DROP SCHEMA statement. + QUERY = 2; + } + + // Describes how the dataset was deleted. + Reason reason = 1; + + // The URI of the job that deleted the dataset. + // Present if the reason is QUERY. + // + // Format: `projects//jobs/`. + string job_name = 2; + } + + // Table creation event. + message TableCreation { + // Describes how the table was created. + enum Reason { + // Unknown. + REASON_UNSPECIFIED = 0; + + // Table was created as a destination table during a query, load or copy + // job. + JOB = 1; + + // Table was created using a DDL query. + QUERY = 2; + + // Table was created using the tables.create API. + TABLE_INSERT_REQUEST = 3; + } + + // Table metadata. + Table table = 1; + + // Describes how the table was created. + Reason reason = 3; + + // The URI of the job that created a table. + // Present if the reason is JOB or QUERY. + // + // Format: `projects//jobs/`. + string job_name = 4; + } + + // Model creation event. + message ModelCreation { + // Describes how the model was created. + enum Reason { + // Unknown. + REASON_UNSPECIFIED = 0; + + // Model was created using a DDL query. + QUERY = 2; + } + + // Model metadata. + Model model = 1; + + // Describes how the model was created. + Reason reason = 3; + + // The URI of the job that created the model. + // + // Format: `projects//jobs/`. + string job_name = 4; + } + + // Routine creation event. + message RoutineCreation { + // Describes how the routine was created. + enum Reason { + // Unknown. + REASON_UNSPECIFIED = 0; + + // Routine was created using a DDL query. + QUERY = 1; + + // Routine was created using the routines.create API. + ROUTINE_INSERT_REQUEST = 2; + } + + // Created routine. + Routine routine = 1; + + // Describes how the routine was created. + Reason reason = 3; + + // The URI of the job that created the routine. + // + // Format: `projects//jobs/`. + string job_name = 4; + } + + // Table data read event. + message TableDataRead { + // Describes how the table data was read. + enum Reason { + // Unknown. + REASON_UNSPECIFIED = 0; + + // Table was used as a source table during a BigQuery job. + JOB = 1; + + // Table data was accessed using the tabledata.list API. + TABLEDATA_LIST_REQUEST = 2; + + // Table data was accessed using the jobs.getQueryResults API. + GET_QUERY_RESULTS_REQUEST = 3; + + // Table data was accessed using the jobs.query RPC. + QUERY_REQUEST = 4; + + // Table data was accessed using storage.CreateReadSession API. + CREATE_READ_SESSION = 5; + + // Table data was accessed during a materialized view refresh. + MATERIALIZED_VIEW_REFRESH = 6; + } + + // List of the accessed fields. Entire list is truncated if the record size + // exceeds 100K. + repeated string fields = 2; + + // True if the fields list was truncated. + bool fields_truncated = 8; + + // List of the referenced policy tags. That is, policy tags attached to the + // accessed fields or their ancestors. + // Policy tag resource name is a string of the format: + // `projects//locations//taxonomies//policyTags/` + repeated string policy_tags = 9; + + // True if the policy tag list was truncated. At most 100 policy tags can be + // saved. + bool policy_tags_truncated = 10; + + // Describes how the table data was read. + Reason reason = 3; + + // The URI of the job that read a table. + // Present if the reason is JOB but can be redacted for privacy reasons. + // + // Format: `projects//jobs/`. + string job_name = 4; + + // The URI of the read session that read a table. + // Present if the reason is CREATE_READ_SESSION. + // + // Format: + // `projects//locations//sessions/`. + string session_name = 5; + } + + // Table metadata change event. + message TableChange { + // Describes how the table metadata was changed. + enum Reason { + // Unknown. + REASON_UNSPECIFIED = 0; + + // Table metadata was updated using the tables.update or tables.patch API. + TABLE_UPDATE_REQUEST = 1; + + // Table was used as a job destination table. + JOB = 2; + + // Table metadata was updated using a DML or DDL query. + QUERY = 3; + } + + // Updated table metadata. + Table table = 1; + + // True if the table was truncated. + bool truncated = 4; + + // Describes how the table metadata was changed. + Reason reason = 5; + + // The URI of the job that changed a table. + // Present if the reason is JOB or QUERY. + // + // Format: `projects//jobs/`. + string job_name = 6; + } + + // Model metadata change event. + message ModelMetadataChange { + // Describes how the model metadata was changed. + enum Reason { + // Unknown. + REASON_UNSPECIFIED = 0; + + // Model metadata was updated using the models.patch API. + MODEL_PATCH_REQUEST = 1; + + // Model metadata was updated using a DDL query. + QUERY = 2; + } + + // Updated model. + Model model = 1; + + // Describes how the model metadata was changed. + Reason reason = 2; + + // The URI of the job that changed the model metadata. + // Present if and only if the reason is QUERY. + // + // Format: `projects//jobs/`. + string job_name = 3; + } + + // Routine change event. + message RoutineChange { + // Describes how the routine was updated. + enum Reason { + // Unknown. + REASON_UNSPECIFIED = 0; + + // Routine was updated using a DDL query. + QUERY = 1; + + // Routine was updated using the routines.update or routines.patch API. + ROUTINE_UPDATE_REQUEST = 2; + } + + // Updated routine. + Routine routine = 1; + + // Describes how the routine was updated. + Reason reason = 3; + + // The URI of the job that updated the routine. + // + // Format: `projects//jobs/`. + string job_name = 4; + } + + // Table data change event. + message TableDataChange { + // Describes how the table data was changed. + enum Reason { + // Unknown. + REASON_UNSPECIFIED = 0; + + // Table was used as a job destination table. + JOB = 1; + + // Table data was updated using a DML or DDL query. + QUERY = 2; + + // Table data was updated during a materialized view refresh. + MATERIALIZED_VIEW_REFRESH = 3; + + // Table data was added using the Write API. + WRITE_API = 4; + } + + // Number of deleted rows. + int64 deleted_rows_count = 1; + + // Number of inserted rows. + int64 inserted_rows_count = 2; + + // True if the table was truncated. + bool truncated = 3; + + // Describes how the table data was changed. + Reason reason = 4; + + // The URI of the job that changed a table. + // + // Format: `projects//jobs/`. + string job_name = 5; + + // If written from WRITE_API, the name of the stream. + // + // Format: + // `projects//datasets//tables//streams/` + string stream_name = 6; + } + + // Model data change event. + message ModelDataChange { + // Describes how the model data was changed. + enum Reason { + // Unknown. + REASON_UNSPECIFIED = 0; + + // Model data was changed using a DDL query. + QUERY = 1; + } + + // Describes how the model data was changed. + Reason reason = 1; + + // The URI of the job that changed the model data. + // + // Format: `projects//jobs/`. + string job_name = 2; + } + + // Model data read event. + message ModelDataRead { + // Describes how the model data was read. + enum Reason { + // Unknown. + REASON_UNSPECIFIED = 0; + + // Model was used as a source model during a BigQuery job. + JOB = 1; + } + + // Describes how the model data was read. + Reason reason = 1; + + // The URI of the job that read the model data. + // + // Format: `projects//jobs/`. + string job_name = 2; + } + + // Table deletion event. + message TableDeletion { + // Describes how the table was deleted. + enum Reason { + // Unknown. + REASON_UNSPECIFIED = 0; + + // Table was deleted using the tables.delete API. + TABLE_DELETE_REQUEST = 2; + + // Table expired. + EXPIRED = 3; + + // Table deleted using a DDL query. + QUERY = 4; + } + + // Describes how table was deleted. + Reason reason = 1; + + // The URI of the job that deleted a table. + // Present if the reason is QUERY. + // + // Format: `projects//jobs/`. + string job_name = 2; + } + + // Model deletion event. + message ModelDeletion { + // Describes how the model was deleted. + enum Reason { + // Unknown. + REASON_UNSPECIFIED = 0; + + // Model was deleted using the models.delete API. + MODEL_DELETE_REQUEST = 1; + + // Model expired. + EXPIRED = 2; + + // Model was deleted using DDL query. + QUERY = 3; + } + + // Describes how the model was deleted. + Reason reason = 1; + + // The URI of the job that deleted a model. + // Present if the reason is QUERY. + // + // Format: `projects//jobs/`. + string job_name = 2; + } + + // Routine deletion event. + message RoutineDeletion { + // Describes how the routine was deleted. + enum Reason { + // Unknown. + REASON_UNSPECIFIED = 0; + + // Routine was deleted using DDL query. + QUERY = 1; + + // Routine was deleted using the API. + ROUTINE_DELETE_REQUEST = 2; + } + + // Deleted routine. + Routine routine = 1; + + // Describes how the routine was deleted. + Reason reason = 3; + + // The URI of the job that deleted the routine. + // Present if the reason is QUERY. + // + // Format: `projects//jobs/`. + string job_name = 4; + } + + // Row access policy creation event. + message RowAccessPolicyCreation { + // The row access policy created by this event. + RowAccessPolicy row_access_policy = 1; + + // The URI of the job that created this row access policy. + // + // Format: `projects//jobs/`. + string job_name = 2; + } + + // Row access policy change event. + message RowAccessPolicyChange { + // The row access policy that was changed by this event. + RowAccessPolicy row_access_policy = 1; + + // The URI of the job that created this row access policy. + // + // Format: `projects//jobs/`. + string job_name = 2; + } + + // Row access policy deletion event. + message RowAccessPolicyDeletion { + // The row access policies that were deleted. At present, only populated + // when a single policy is dropped. + repeated RowAccessPolicy row_access_policies = 1; + + // The job that deleted these row access policies. + // + // Format: `projects//jobs/`. + string job_name = 2; + + // This field is set to true when a DROP ALL command has been executed, thus + // removing all row access policies on the table. + bool all_row_access_policies_dropped = 3; + } + + // Unlink linked dataset from its source dataset event + message UnlinkDataset { + // Describes how the unlinking operation occurred. + enum Reason { + // Unknown. + REASON_UNSPECIFIED = 0; + + // Linked dataset unlinked via API + UNLINK_API = 1; + } + + // The linked dataset URI which is unlinked from its source. + // + // Format: `projects//datasets/`. + string linked_dataset = 1; + + // The source dataset URI from which the linked dataset is unlinked. + // + // Format: `projects//datasets/`. + string source_dataset = 2; + + // Reason for unlinking linked dataset + Reason reason = 3; + } + + // BigQuery job. + message Job { + // Job URI. + // + // Format: `projects//jobs/`. + string job_name = 1; + + // Job configuration. + JobConfig job_config = 2; + + // Job status. + JobStatus job_status = 3; + + // Job statistics. + JobStats job_stats = 4; + } + + // Job configuration. + // See the [Jobs](https://cloud.google.com/bigquery/docs/reference/v2/jobs) + // API resource for more details on individual fields. + message JobConfig { + // Job type. + enum Type { + // Unknown. + TYPE_UNSPECIFIED = 0; + + // Query job. + QUERY = 1; + + // Table copy job. + COPY = 2; + + // Export (extract) job. + EXPORT = 3; + + // Import (load) job. + IMPORT = 4; + } + + // Query job configuration. + message Query { + // Priority given to the query. + enum Priority { + // Unknown. + PRIORITY_UNSPECIFIED = 0; + + // Interactive query. + QUERY_INTERACTIVE = 1; + + // Batch query. + QUERY_BATCH = 2; + } + + // The SQL query to run. Truncated if exceeds 50K. + string query = 1; + + // True if the query field was truncated. + bool query_truncated = 10; + + // The destination table for the query results. + string destination_table = 2; + + // Destination table create disposition. + CreateDisposition create_disposition = 3; + + // Destination table write disposition. + WriteDisposition write_disposition = 4; + + // Default dataset for the query. + string default_dataset = 5; + + // External data sources used in the query. + repeated TableDefinition table_definitions = 6; + + // Priority given to the query. + Priority priority = 7; + + // Result table encryption information. Set when non-default encryption is + // used. + EncryptionInfo destination_table_encryption = 8; + + // Type of the query. + QueryStatementType statement_type = 9; + } + + // Load job configuration. + message Load { + // URIs for the data to be imported. Entire list is truncated if exceeds + // 40K. + repeated string source_uris = 1; + + // True if the source_URIs field was truncated. + bool source_uris_truncated = 7; + + // The table schema in JSON format. Entire field is truncated if exceeds + // 40K. + string schema_json = 2; + + // True if the schema_json field was truncated. + bool schema_json_truncated = 8; + + // The destination table for the import. + string destination_table = 3; + + // Destination table create disposition. + CreateDisposition create_disposition = 4; + + // Destination table write disposition. + WriteDisposition write_disposition = 5; + + // Result table encryption information. Set when non-default encryption is + // used. + EncryptionInfo destination_table_encryption = 6; + } + + // Extract job configuration. + message Extract { + // URIs where extracted data should be written. Entire list is truncated + // if exceeds 50K. + repeated string destination_uris = 1; + + // True if the destination_URIs field was truncated. + bool destination_uris_truncated = 3; + + oneof source { + // The source table. + string source_table = 2; + + // The source model. + string source_model = 4; + } + } + + // Table copy job configuration. + message TableCopy { + // Source tables. Entire list is truncated if exceeds 50K. + repeated string source_tables = 1; + + // True if the source_tables field was truncated. + bool source_tables_truncated = 6; + + // Destination table. + string destination_table = 2; + + // Destination table create disposition. + CreateDisposition create_disposition = 3; + + // Destination table write disposition. + WriteDisposition write_disposition = 4; + + // Result table encryption information. Set when non-default encryption is + // used. + EncryptionInfo destination_table_encryption = 5; + + // Supported operation types in the table copy job. + OperationType operation_type = 7; + + // Expiration time set on the destination table. Expired tables will be + // deleted and their storage reclaimed. + google.protobuf.Timestamp destination_expiration_time = 8; + } + + // Job type. + Type type = 1; + + // Job configuration information. + oneof config { + // Query job information. + Query query_config = 2; + + // Load job information. + Load load_config = 3; + + // Extract job information. + Extract extract_config = 4; + + // TableCopy job information. + TableCopy table_copy_config = 5; + } + + // Labels provided for the job. + map labels = 6; + } + + // Definition of an external data source used in a query. + message TableDefinition { + // Name of the table, used in queries. + string name = 1; + + // URIs for the data. + repeated string source_uris = 2; + } + + // Describes whether a job should create a destination table if it doesn't + // exist. + enum CreateDisposition { + // Unknown. + CREATE_DISPOSITION_UNSPECIFIED = 0; + + // This job should never create tables. + CREATE_NEVER = 1; + + // This job should create a table if it doesn't already exist. + CREATE_IF_NEEDED = 2; + } + + // Describes whether a job should overwrite or append the existing destination + // table if it already exists. + enum WriteDisposition { + // Unknown. + WRITE_DISPOSITION_UNSPECIFIED = 0; + + // This job should only be writing to empty tables. + WRITE_EMPTY = 1; + + // This job will truncate the existing table data. + WRITE_TRUNCATE = 2; + + // This job will append to the table. + WRITE_APPEND = 3; + } + + // Table copy job operation type. + enum OperationType { + // Unspecified operation type. + OPERATION_TYPE_UNSPECIFIED = 0; + + // The source and the destination table have the same table type. + COPY = 1; + + // The source table type is TABLE and + // the destination table type is SNAPSHOT. + SNAPSHOT = 2; + + // The source table type is SNAPSHOT and + // the destination table type is TABLE. + RESTORE = 3; + } + + // State of a job. + enum JobState { + // State unknown. + JOB_STATE_UNSPECIFIED = 0; + + // Job is waiting for the resources. + PENDING = 1; + + // Job is running. + RUNNING = 2; + + // Job is done. + DONE = 3; + } + + // Type of the statement (e.g. SELECT, INSERT, CREATE_TABLE, CREATE_MODEL..) + enum QueryStatementType { + // Unknown. + QUERY_STATEMENT_TYPE_UNSPECIFIED = 0; + + // SELECT ... FROM <Table list> ... + SELECT = 1; + + // ASSERT <condition> AS 'description' + ASSERT = 23; + + // INSERT INTO <Table> .... + INSERT = 2; + + // UPDATE <Table> SET ... + UPDATE = 3; + + // DELETE <Table> ... + DELETE = 4; + + // MERGE INTO <Table> .... + MERGE = 5; + + // CREATE TABLE <Table> <column list> + CREATE_TABLE = 6; + + // CREATE TABLE <Table> AS SELECT + CREATE_TABLE_AS_SELECT = 7; + + // CREATE VIEW <View> + CREATE_VIEW = 8; + + // CREATE MODEL <Model> AS <Query> + CREATE_MODEL = 9; + + // CREATE MATERIALIZED VIEW <View> AS ... + CREATE_MATERIALIZED_VIEW = 13; + + // CREATE FUNCTION <Function>(<Signature>) AS ... + CREATE_FUNCTION = 14; + + // CREATE TABLE FUNCTION <Function>(<Signature>) AS ... + CREATE_TABLE_FUNCTION = 56; + + // CREATE PROCEDURE <Procedure> + CREATE_PROCEDURE = 20; + + // CREATE ROW ACCESS POLICY <RowAccessPolicy> ON <Table> + CREATE_ROW_ACCESS_POLICY = 24; + + // CREATE SCHEMA <Schema> + CREATE_SCHEMA = 53; + + // CREATE SNAPSHOT TABLE <Snapshot> CLONE <Table> + CREATE_SNAPSHOT_TABLE = 59; + + // DROP TABLE <Table> + DROP_TABLE = 10; + + // DROP EXTERNAL TABLE <Table> + DROP_EXTERNAL_TABLE = 33; + + // DROP VIEW <View> + DROP_VIEW = 11; + + // DROP MODEL <Model> + DROP_MODEL = 12; + + // DROP MATERIALIZED VIEW <View> + DROP_MATERIALIZED_VIEW = 15; + + // DROP FUNCTION <Function> + DROP_FUNCTION = 16; + + // DROP PROCEDURE <Procedure> + DROP_PROCEDURE = 21; + + // DROP SCHEMA <Schema> + DROP_SCHEMA = 54; + + // DROP ROW ACCESS POLICY <RowAccessPolicy> ON <Table> DROP + // ALL ROW ACCESS POLICIES ON ON <Table> + DROP_ROW_ACCESS_POLICY = 25; + + // DROP SNAPSHOT TABLE <Snapshot> + DROP_SNAPSHOT_TABLE = 62; + + // ALTER TABLE <Table> + ALTER_TABLE = 17; + + // ALTER VIEW <View> + ALTER_VIEW = 18; + + // ALTER MATERIALIZED_VIEW <view> + ALTER_MATERIALIZED_VIEW = 22; + + // ALTER SCHEMA <Schema> + ALTER_SCHEMA = 55; + + // Script + SCRIPT = 19; + + // TRUNCATE TABLE <Table> + TRUNCATE_TABLE = 26; + + // CREATE EXTERNAL TABLE <TABLE> + CREATE_EXTERNAL_TABLE = 27; + + // EXPORT DATA; + EXPORT_DATA = 28; + + // CALL <stored procedure> + CALL = 29; + } + + // Status of a job. + message JobStatus { + // State of the job. + JobState job_state = 1; + + // Job error, if the job failed. + google.rpc.Status error_result = 2; + + // Errors encountered during the running of the job. Does not necessarily + // mean that the job has completed or was unsuccessful. + repeated google.rpc.Status errors = 3; + } + + // Job statistics. + message JobStats { + // Query job statistics. + message Query { + // Total bytes processed by the query job. + int64 total_processed_bytes = 1; + + // Total bytes billed by the query job. + int64 total_billed_bytes = 2; + + // The tier assigned by the CPU-based billing. + int32 billing_tier = 3; + + // Tables accessed by the query job. + repeated string referenced_tables = 6; + + // Views accessed by the query job. + repeated string referenced_views = 7; + + // Routines accessed by the query job. + repeated string referenced_routines = 10; + + // Number of output rows produced by the query job. + int64 output_row_count = 8; + + // True if the query job results were read from the query cache. + bool cache_hit = 9; + } + + // Load job statistics. + message Load { + // Total bytes loaded by the import job. + int64 total_output_bytes = 1; + } + + // Extract job statistics. + message Extract { + // Total bytes exported by the extract job. + int64 total_input_bytes = 1; + } + + // Job resource usage breakdown by reservation. + message ReservationResourceUsage { + // Reservation name or "unreserved" for on-demand resources usage. + string name = 1; + + // Total slot milliseconds used by the reservation for a particular job. + int64 slot_ms = 2; + } + + // Job creation time. + google.protobuf.Timestamp create_time = 1; + + // Job execution start time. + google.protobuf.Timestamp start_time = 2; + + // Job completion time. + google.protobuf.Timestamp end_time = 3; + + // Statistics specific to the job type. + oneof extended { + // Query job statistics. + Query query_stats = 8; + + // Load job statistics. + Load load_stats = 9; + + // Extract job statistics. + Extract extract_stats = 13; + } + + // The total number of slot-ms consumed by the query job. + int64 total_slot_ms = 10; + + // Reservation usage attributed from each tier of a reservation hierarchy. + // This field reported misleading information and will no longer be + // populated. Aggregate usage of all jobs submitted to a reservation + // should provide a more reliable indicator of reservation imbalance. + repeated ReservationResourceUsage reservation_usage = 11 + [deprecated = true]; + + // Reservation name or "unreserved" for on-demand resource usage. + string reservation = 14; + + // Parent job name. Only present for child jobs. + string parent_job_name = 12; + } + + // BigQuery table. + message Table { + // Table URI. + // + // Format: `projects//datasets//tables/`. + string table_name = 1; + + // User-provided metadata for the table. + EntityInfo table_info = 10; + + // A JSON representation of the table's schema. Entire field is truncated + // if exceeds 40K. + string schema_json = 3; + + // True if the schema_json field was truncated. + bool schema_json_truncated = 11; + + // View metadata. Only present for views. + TableViewDefinition view = 4; + + // Table expiration time. + google.protobuf.Timestamp expire_time = 5; + + // The table creation time. + google.protobuf.Timestamp create_time = 6; + + // The last time metadata update time. + google.protobuf.Timestamp update_time = 7; + + // The last table truncation time. + google.protobuf.Timestamp truncate_time = 8; + + // Table encryption information. Set when non-default encryption is used. + EncryptionInfo encryption = 9; + } + + // Trained BigQuery ML model. + message Model { + // Model URI. + // + // Format: `projects//datasets//models/`. + string model_name = 1; + + // User-provided metadata for the model. + EntityInfo model_info = 2; + + // Model expiration time. + google.protobuf.Timestamp expire_time = 5; + + // Model creation time. + google.protobuf.Timestamp create_time = 6; + + // Model last update time. + google.protobuf.Timestamp update_time = 7; + + // Model encryption information. Set when non-default encryption is used. + EncryptionInfo encryption = 8; + } + + // User Defined Function (UDF) or Stored Procedure. + message Routine { + // Routine URI. + // + // Format: + // `projects//datasets//routines/`. + string routine_name = 1; + + // Routine creation time. + google.protobuf.Timestamp create_time = 5; + + // Routine last update time. + google.protobuf.Timestamp update_time = 6; + } + + // User-provided metadata for an entity, for e.g. dataset, table or model. + message EntityInfo { + // A short name for the entity. + string friendly_name = 1; + + // A long description for the entity. + string description = 2; + + // Labels provided for the entity. + map labels = 3; + } + + // View definition. + message TableViewDefinition { + // SQL query defining the view. Truncated if exceeds 40K. + string query = 1; + + // True if the schema_json field was truncated. + bool query_truncated = 2; + } + + // BigQuery dataset. + message Dataset { + // Dataset URI. + // + // Format: `projects//datasets/`. + string dataset_name = 1; + + // User-provided metadata for the dataset. + EntityInfo dataset_info = 7; + + // Dataset creation time. + google.protobuf.Timestamp create_time = 3; + + // Dataset metadata last update time. + google.protobuf.Timestamp update_time = 4; + + // The access control list for the dataset. + BigQueryAcl acl = 5; + + // Default expiration time for tables in the dataset. + google.protobuf.Duration default_table_expire_duration = 6; + + // Default encryption for tables in the dataset. + EncryptionInfo default_encryption = 8; + + // Default collation for the dataset. + string default_collation = 9; + } + + // An access control list. + message BigQueryAcl { + // IAM policy for the resource. + google.iam.v1.Policy policy = 1; + + // List of authorized views for a dataset. + // + // Format: `projects//datasets//tables/`. + repeated string authorized_views = 2; + } + + // Encryption properties for a table or a job + message EncryptionInfo { + // Cloud kms key identifier. + // + // Format: + // `projects//locations//keyRings//cryptoKeys/` + string kms_key_name = 1; + } + + // BigQuery row access policy. + message RowAccessPolicy { + // Row access policy URI. + // + // Format: + // `projects//datasets//tables//rowAccessPolicies/` + string row_access_policy_name = 1; + } + + // First party (Google) application specific request metadata. + message FirstPartyAppMetadata { + oneof metadata { + // Google Sheets metadata. + SheetsMetadata sheets_metadata = 1; + } + } + + // Google Sheets specific request metadata. + message SheetsMetadata { + // The ID of the spreadsheet from which the request is sent. + string doc_id = 1; + } + + // BigQuery event information. + oneof event { + // Job insertion event. + JobInsertion job_insertion = 1; + + // Job state change event. + JobChange job_change = 2; + + // Job deletion event. + JobDeletion job_deletion = 23; + + // Dataset creation event. + DatasetCreation dataset_creation = 3; + + // Dataset change event. + DatasetChange dataset_change = 4; + + // Dataset deletion event. + DatasetDeletion dataset_deletion = 5; + + // Table creation event. + TableCreation table_creation = 6; + + // Table metadata change event. + TableChange table_change = 8; + + // Table deletion event. + TableDeletion table_deletion = 9; + + // Table data read event. + TableDataRead table_data_read = 10; + + // Table data change event. + TableDataChange table_data_change = 11; + + // Model deletion event. + ModelDeletion model_deletion = 12; + + // Model creation event. + ModelCreation model_creation = 13; + + // Model metadata change event. + ModelMetadataChange model_metadata_change = 14; + + // Model data change event. + ModelDataChange model_data_change = 15; + + // Model data read event. + ModelDataRead model_data_read = 19; + + // Routine creation event. + RoutineCreation routine_creation = 16; + + // Routine change event. + RoutineChange routine_change = 17; + + // Routine deletion event. + RoutineDeletion routine_deletion = 18; + + // Row access policy create event. + RowAccessPolicyCreation row_access_policy_creation = 20; + + // Row access policy change event. + RowAccessPolicyChange row_access_policy_change = 21; + + // Row access policy deletion event. + RowAccessPolicyDeletion row_access_policy_deletion = 22; + + // Unlink linked dataset from its source dataset event + UnlinkDataset unlink_dataset = 25; + } + + // First party (Google) application specific metadata. + FirstPartyAppMetadata first_party_app_metadata = 24; +} diff --git a/google/cloud/audit/bigquery_audit_metadata_pb2.py b/google/cloud/audit/bigquery_audit_metadata_pb2.py new file mode 100644 index 0000000..f9d0340 --- /dev/null +++ b/google/cloud/audit/bigquery_audit_metadata_pb2.py @@ -0,0 +1,214 @@ +# -*- coding: utf-8 -*- + +# Copyright 2024 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 by the protocol buffer compiler. DO NOT EDIT! +# source: google/cloud/audit/bigquery_audit_metadata.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder + +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.iam.v1 import policy_pb2 as google_dot_iam_dot_v1_dot_policy__pb2 +from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from google.rpc import status_pb2 as google_dot_rpc_dot_status__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( + b'\n0google/cloud/audit/bigquery_audit_metadata.proto\x12\x12google.cloud.audit\x1a\x1agoogle/iam/v1/policy.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x17google/rpc/status.proto"\xabo\n\x15\x42igQueryAuditMetadata\x12O\n\rjob_insertion\x18\x01 \x01(\x0b\x32\x36.google.cloud.audit.BigQueryAuditMetadata.JobInsertionH\x00\x12I\n\njob_change\x18\x02 \x01(\x0b\x32\x33.google.cloud.audit.BigQueryAuditMetadata.JobChangeH\x00\x12M\n\x0cjob_deletion\x18\x17 \x01(\x0b\x32\x35.google.cloud.audit.BigQueryAuditMetadata.JobDeletionH\x00\x12U\n\x10\x64\x61taset_creation\x18\x03 \x01(\x0b\x32\x39.google.cloud.audit.BigQueryAuditMetadata.DatasetCreationH\x00\x12Q\n\x0e\x64\x61taset_change\x18\x04 \x01(\x0b\x32\x37.google.cloud.audit.BigQueryAuditMetadata.DatasetChangeH\x00\x12U\n\x10\x64\x61taset_deletion\x18\x05 \x01(\x0b\x32\x39.google.cloud.audit.BigQueryAuditMetadata.DatasetDeletionH\x00\x12Q\n\x0etable_creation\x18\x06 \x01(\x0b\x32\x37.google.cloud.audit.BigQueryAuditMetadata.TableCreationH\x00\x12M\n\x0ctable_change\x18\x08 \x01(\x0b\x32\x35.google.cloud.audit.BigQueryAuditMetadata.TableChangeH\x00\x12Q\n\x0etable_deletion\x18\t \x01(\x0b\x32\x37.google.cloud.audit.BigQueryAuditMetadata.TableDeletionH\x00\x12R\n\x0ftable_data_read\x18\n \x01(\x0b\x32\x37.google.cloud.audit.BigQueryAuditMetadata.TableDataReadH\x00\x12V\n\x11table_data_change\x18\x0b \x01(\x0b\x32\x39.google.cloud.audit.BigQueryAuditMetadata.TableDataChangeH\x00\x12Q\n\x0emodel_deletion\x18\x0c \x01(\x0b\x32\x37.google.cloud.audit.BigQueryAuditMetadata.ModelDeletionH\x00\x12Q\n\x0emodel_creation\x18\r \x01(\x0b\x32\x37.google.cloud.audit.BigQueryAuditMetadata.ModelCreationH\x00\x12^\n\x15model_metadata_change\x18\x0e \x01(\x0b\x32=.google.cloud.audit.BigQueryAuditMetadata.ModelMetadataChangeH\x00\x12V\n\x11model_data_change\x18\x0f \x01(\x0b\x32\x39.google.cloud.audit.BigQueryAuditMetadata.ModelDataChangeH\x00\x12R\n\x0fmodel_data_read\x18\x13 \x01(\x0b\x32\x37.google.cloud.audit.BigQueryAuditMetadata.ModelDataReadH\x00\x12U\n\x10routine_creation\x18\x10 \x01(\x0b\x32\x39.google.cloud.audit.BigQueryAuditMetadata.RoutineCreationH\x00\x12Q\n\x0eroutine_change\x18\x11 \x01(\x0b\x32\x37.google.cloud.audit.BigQueryAuditMetadata.RoutineChangeH\x00\x12U\n\x10routine_deletion\x18\x12 \x01(\x0b\x32\x39.google.cloud.audit.BigQueryAuditMetadata.RoutineDeletionH\x00\x12g\n\x1arow_access_policy_creation\x18\x14 \x01(\x0b\x32\x41.google.cloud.audit.BigQueryAuditMetadata.RowAccessPolicyCreationH\x00\x12\x63\n\x18row_access_policy_change\x18\x15 \x01(\x0b\x32?.google.cloud.audit.BigQueryAuditMetadata.RowAccessPolicyChangeH\x00\x12g\n\x1arow_access_policy_deletion\x18\x16 \x01(\x0b\x32\x41.google.cloud.audit.BigQueryAuditMetadata.RowAccessPolicyDeletionH\x00\x12Q\n\x0eunlink_dataset\x18\x19 \x01(\x0b\x32\x37.google.cloud.audit.BigQueryAuditMetadata.UnlinkDatasetH\x00\x12\x61\n\x18\x66irst_party_app_metadata\x18\x18 \x01(\x0b\x32?.google.cloud.audit.BigQueryAuditMetadata.FirstPartyAppMetadata\x1a\xe6\x01\n\x0cJobInsertion\x12:\n\x03job\x18\x01 \x01(\x0b\x32-.google.cloud.audit.BigQueryAuditMetadata.Job\x12M\n\x06reason\x18\x02 \x01(\x0e\x32=.google.cloud.audit.BigQueryAuditMetadata.JobInsertion.Reason"K\n\x06Reason\x12\x16\n\x12REASON_UNSPECIFIED\x10\x00\x12\x16\n\x12JOB_INSERT_REQUEST\x10\x01\x12\x11\n\rQUERY_REQUEST\x10\x02\x1a\xce\x01\n\tJobChange\x12\x42\n\x06\x62\x65\x66ore\x18\x01 \x01(\x0e\x32\x32.google.cloud.audit.BigQueryAuditMetadata.JobState\x12\x41\n\x05\x61\x66ter\x18\x02 \x01(\x0e\x32\x32.google.cloud.audit.BigQueryAuditMetadata.JobState\x12:\n\x03job\x18\x03 \x01(\x0b\x32-.google.cloud.audit.BigQueryAuditMetadata.Job\x1a\xa7\x01\n\x0bJobDeletion\x12\x10\n\x08job_name\x18\x01 \x01(\t\x12L\n\x06reason\x18\x02 \x01(\x0e\x32<.google.cloud.audit.BigQueryAuditMetadata.JobDeletion.Reason"8\n\x06Reason\x12\x16\n\x12REASON_UNSPECIFIED\x10\x00\x12\x16\n\x12JOB_DELETE_REQUEST\x10\x01\x1a\xf2\x01\n\x0f\x44\x61tasetCreation\x12\x42\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x31.google.cloud.audit.BigQueryAuditMetadata.Dataset\x12P\n\x06reason\x18\x02 \x01(\x0e\x32@.google.cloud.audit.BigQueryAuditMetadata.DatasetCreation.Reason\x12\x10\n\x08job_name\x18\x03 \x01(\t"7\n\x06Reason\x12\x16\n\x12REASON_UNSPECIFIED\x10\x00\x12\n\n\x06\x43REATE\x10\x01\x12\t\n\x05QUERY\x10\x02\x1a\x82\x02\n\rDatasetChange\x12\x42\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x31.google.cloud.audit.BigQueryAuditMetadata.Dataset\x12N\n\x06reason\x18\x02 \x01(\x0e\x32>.google.cloud.audit.BigQueryAuditMetadata.DatasetChange.Reason\x12\x10\n\x08job_name\x18\x03 \x01(\t"K\n\x06Reason\x12\x16\n\x12REASON_UNSPECIFIED\x10\x00\x12\n\n\x06UPDATE\x10\x01\x12\x12\n\x0eSET_IAM_POLICY\x10\x02\x12\t\n\x05QUERY\x10\x03\x1a\xae\x01\n\x0f\x44\x61tasetDeletion\x12P\n\x06reason\x18\x01 \x01(\x0e\x32@.google.cloud.audit.BigQueryAuditMetadata.DatasetDeletion.Reason\x12\x10\n\x08job_name\x18\x02 \x01(\t"7\n\x06Reason\x12\x16\n\x12REASON_UNSPECIFIED\x10\x00\x12\n\n\x06\x44\x45LETE\x10\x01\x12\t\n\x05QUERY\x10\x02\x1a\x81\x02\n\rTableCreation\x12>\n\x05table\x18\x01 \x01(\x0b\x32/.google.cloud.audit.BigQueryAuditMetadata.Table\x12N\n\x06reason\x18\x03 \x01(\x0e\x32>.google.cloud.audit.BigQueryAuditMetadata.TableCreation.Reason\x12\x10\n\x08job_name\x18\x04 \x01(\t"N\n\x06Reason\x12\x16\n\x12REASON_UNSPECIFIED\x10\x00\x12\x07\n\x03JOB\x10\x01\x12\t\n\x05QUERY\x10\x02\x12\x18\n\x14TABLE_INSERT_REQUEST\x10\x03\x1a\xde\x01\n\rModelCreation\x12>\n\x05model\x18\x01 \x01(\x0b\x32/.google.cloud.audit.BigQueryAuditMetadata.Model\x12N\n\x06reason\x18\x03 \x01(\x0e\x32>.google.cloud.audit.BigQueryAuditMetadata.ModelCreation.Reason\x12\x10\n\x08job_name\x18\x04 \x01(\t"+\n\x06Reason\x12\x16\n\x12REASON_UNSPECIFIED\x10\x00\x12\t\n\x05QUERY\x10\x02\x1a\x82\x02\n\x0fRoutineCreation\x12\x42\n\x07routine\x18\x01 \x01(\x0b\x32\x31.google.cloud.audit.BigQueryAuditMetadata.Routine\x12P\n\x06reason\x18\x03 \x01(\x0e\x32@.google.cloud.audit.BigQueryAuditMetadata.RoutineCreation.Reason\x12\x10\n\x08job_name\x18\x04 \x01(\t"G\n\x06Reason\x12\x16\n\x12REASON_UNSPECIFIED\x10\x00\x12\t\n\x05QUERY\x10\x01\x12\x1a\n\x16ROUTINE_INSERT_REQUEST\x10\x02\x1a\x97\x03\n\rTableDataRead\x12\x0e\n\x06\x66ields\x18\x02 \x03(\t\x12\x18\n\x10\x66ields_truncated\x18\x08 \x01(\x08\x12\x13\n\x0bpolicy_tags\x18\t \x03(\t\x12\x1d\n\x15policy_tags_truncated\x18\n \x01(\x08\x12N\n\x06reason\x18\x03 \x01(\x0e\x32>.google.cloud.audit.BigQueryAuditMetadata.TableDataRead.Reason\x12\x10\n\x08job_name\x18\x04 \x01(\t\x12\x14\n\x0csession_name\x18\x05 \x01(\t"\xaf\x01\n\x06Reason\x12\x16\n\x12REASON_UNSPECIFIED\x10\x00\x12\x07\n\x03JOB\x10\x01\x12\x1a\n\x16TABLEDATA_LIST_REQUEST\x10\x02\x12\x1d\n\x19GET_QUERY_RESULTS_REQUEST\x10\x03\x12\x11\n\rQUERY_REQUEST\x10\x04\x12\x17\n\x13\x43REATE_READ_SESSION\x10\x05\x12\x1d\n\x19MATERIALIZED_VIEW_REFRESH\x10\x06\x1a\x90\x02\n\x0bTableChange\x12>\n\x05table\x18\x01 \x01(\x0b\x32/.google.cloud.audit.BigQueryAuditMetadata.Table\x12\x11\n\ttruncated\x18\x04 \x01(\x08\x12L\n\x06reason\x18\x05 \x01(\x0e\x32<.google.cloud.audit.BigQueryAuditMetadata.TableChange.Reason\x12\x10\n\x08job_name\x18\x06 \x01(\t"N\n\x06Reason\x12\x16\n\x12REASON_UNSPECIFIED\x10\x00\x12\x18\n\x14TABLE_UPDATE_REQUEST\x10\x01\x12\x07\n\x03JOB\x10\x02\x12\t\n\x05QUERY\x10\x03\x1a\x83\x02\n\x13ModelMetadataChange\x12>\n\x05model\x18\x01 \x01(\x0b\x32/.google.cloud.audit.BigQueryAuditMetadata.Model\x12T\n\x06reason\x18\x02 \x01(\x0e\x32\x44.google.cloud.audit.BigQueryAuditMetadata.ModelMetadataChange.Reason\x12\x10\n\x08job_name\x18\x03 \x01(\t"D\n\x06Reason\x12\x16\n\x12REASON_UNSPECIFIED\x10\x00\x12\x17\n\x13MODEL_PATCH_REQUEST\x10\x01\x12\t\n\x05QUERY\x10\x02\x1a\xfe\x01\n\rRoutineChange\x12\x42\n\x07routine\x18\x01 \x01(\x0b\x32\x31.google.cloud.audit.BigQueryAuditMetadata.Routine\x12N\n\x06reason\x18\x03 \x01(\x0e\x32>.google.cloud.audit.BigQueryAuditMetadata.RoutineChange.Reason\x12\x10\n\x08job_name\x18\x04 \x01(\t"G\n\x06Reason\x12\x16\n\x12REASON_UNSPECIFIED\x10\x00\x12\t\n\x05QUERY\x10\x01\x12\x1a\n\x16ROUTINE_UPDATE_REQUEST\x10\x02\x1a\xba\x02\n\x0fTableDataChange\x12\x1a\n\x12\x64\x65leted_rows_count\x18\x01 \x01(\x03\x12\x1b\n\x13inserted_rows_count\x18\x02 \x01(\x03\x12\x11\n\ttruncated\x18\x03 \x01(\x08\x12P\n\x06reason\x18\x04 \x01(\x0e\x32@.google.cloud.audit.BigQueryAuditMetadata.TableDataChange.Reason\x12\x10\n\x08job_name\x18\x05 \x01(\t\x12\x13\n\x0bstream_name\x18\x06 \x01(\t"b\n\x06Reason\x12\x16\n\x12REASON_UNSPECIFIED\x10\x00\x12\x07\n\x03JOB\x10\x01\x12\t\n\x05QUERY\x10\x02\x12\x1d\n\x19MATERIALIZED_VIEW_REFRESH\x10\x03\x12\r\n\tWRITE_API\x10\x04\x1a\xa2\x01\n\x0fModelDataChange\x12P\n\x06reason\x18\x01 \x01(\x0e\x32@.google.cloud.audit.BigQueryAuditMetadata.ModelDataChange.Reason\x12\x10\n\x08job_name\x18\x02 \x01(\t"+\n\x06Reason\x12\x16\n\x12REASON_UNSPECIFIED\x10\x00\x12\t\n\x05QUERY\x10\x01\x1a\x9c\x01\n\rModelDataRead\x12N\n\x06reason\x18\x01 \x01(\x0e\x32>.google.cloud.audit.BigQueryAuditMetadata.ModelDataRead.Reason\x12\x10\n\x08job_name\x18\x02 \x01(\t")\n\x06Reason\x12\x16\n\x12REASON_UNSPECIFIED\x10\x00\x12\x07\n\x03JOB\x10\x01\x1a\xc5\x01\n\rTableDeletion\x12N\n\x06reason\x18\x01 \x01(\x0e\x32>.google.cloud.audit.BigQueryAuditMetadata.TableDeletion.Reason\x12\x10\n\x08job_name\x18\x02 \x01(\t"R\n\x06Reason\x12\x16\n\x12REASON_UNSPECIFIED\x10\x00\x12\x18\n\x14TABLE_DELETE_REQUEST\x10\x02\x12\x0b\n\x07\x45XPIRED\x10\x03\x12\t\n\x05QUERY\x10\x04\x1a\xc5\x01\n\rModelDeletion\x12N\n\x06reason\x18\x01 \x01(\x0e\x32>.google.cloud.audit.BigQueryAuditMetadata.ModelDeletion.Reason\x12\x10\n\x08job_name\x18\x02 \x01(\t"R\n\x06Reason\x12\x16\n\x12REASON_UNSPECIFIED\x10\x00\x12\x18\n\x14MODEL_DELETE_REQUEST\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x12\t\n\x05QUERY\x10\x03\x1a\x82\x02\n\x0fRoutineDeletion\x12\x42\n\x07routine\x18\x01 \x01(\x0b\x32\x31.google.cloud.audit.BigQueryAuditMetadata.Routine\x12P\n\x06reason\x18\x03 \x01(\x0e\x32@.google.cloud.audit.BigQueryAuditMetadata.RoutineDeletion.Reason\x12\x10\n\x08job_name\x18\x04 \x01(\t"G\n\x06Reason\x12\x16\n\x12REASON_UNSPECIFIED\x10\x00\x12\t\n\x05QUERY\x10\x01\x12\x1a\n\x16ROUTINE_DELETE_REQUEST\x10\x02\x1a\x81\x01\n\x17RowAccessPolicyCreation\x12T\n\x11row_access_policy\x18\x01 \x01(\x0b\x32\x39.google.cloud.audit.BigQueryAuditMetadata.RowAccessPolicy\x12\x10\n\x08job_name\x18\x02 \x01(\t\x1a\x7f\n\x15RowAccessPolicyChange\x12T\n\x11row_access_policy\x18\x01 \x01(\x0b\x32\x39.google.cloud.audit.BigQueryAuditMetadata.RowAccessPolicy\x12\x10\n\x08job_name\x18\x02 \x01(\t\x1a\xac\x01\n\x17RowAccessPolicyDeletion\x12V\n\x13row_access_policies\x18\x01 \x03(\x0b\x32\x39.google.cloud.audit.BigQueryAuditMetadata.RowAccessPolicy\x12\x10\n\x08job_name\x18\x02 \x01(\t\x12\'\n\x1f\x61ll_row_access_policies_dropped\x18\x03 \x01(\x08\x1a\xc1\x01\n\rUnlinkDataset\x12\x16\n\x0elinked_dataset\x18\x01 \x01(\t\x12\x16\n\x0esource_dataset\x18\x02 \x01(\t\x12N\n\x06reason\x18\x03 \x01(\x0e\x32>.google.cloud.audit.BigQueryAuditMetadata.UnlinkDataset.Reason"0\n\x06Reason\x12\x16\n\x12REASON_UNSPECIFIED\x10\x00\x12\x0e\n\nUNLINK_API\x10\x01\x1a\xf0\x01\n\x03Job\x12\x10\n\x08job_name\x18\x01 \x01(\t\x12G\n\njob_config\x18\x02 \x01(\x0b\x32\x33.google.cloud.audit.BigQueryAuditMetadata.JobConfig\x12G\n\njob_status\x18\x03 \x01(\x0b\x32\x33.google.cloud.audit.BigQueryAuditMetadata.JobStatus\x12\x45\n\tjob_stats\x18\x04 \x01(\x0b\x32\x32.google.cloud.audit.BigQueryAuditMetadata.JobStats\x1a\xe8\x12\n\tJobConfig\x12\x46\n\x04type\x18\x01 \x01(\x0e\x32\x38.google.cloud.audit.BigQueryAuditMetadata.JobConfig.Type\x12Q\n\x0cquery_config\x18\x02 \x01(\x0b\x32\x39.google.cloud.audit.BigQueryAuditMetadata.JobConfig.QueryH\x00\x12O\n\x0bload_config\x18\x03 \x01(\x0b\x32\x38.google.cloud.audit.BigQueryAuditMetadata.JobConfig.LoadH\x00\x12U\n\x0e\x65xtract_config\x18\x04 \x01(\x0b\x32;.google.cloud.audit.BigQueryAuditMetadata.JobConfig.ExtractH\x00\x12Z\n\x11table_copy_config\x18\x05 \x01(\x0b\x32=.google.cloud.audit.BigQueryAuditMetadata.JobConfig.TableCopyH\x00\x12O\n\x06labels\x18\x06 \x03(\x0b\x32?.google.cloud.audit.BigQueryAuditMetadata.JobConfig.LabelsEntry\x1a\xc3\x05\n\x05Query\x12\r\n\x05query\x18\x01 \x01(\t\x12\x17\n\x0fquery_truncated\x18\n \x01(\x08\x12\x19\n\x11\x64\x65stination_table\x18\x02 \x01(\t\x12W\n\x12\x63reate_disposition\x18\x03 \x01(\x0e\x32;.google.cloud.audit.BigQueryAuditMetadata.CreateDisposition\x12U\n\x11write_disposition\x18\x04 \x01(\x0e\x32:.google.cloud.audit.BigQueryAuditMetadata.WriteDisposition\x12\x17\n\x0f\x64\x65\x66\x61ult_dataset\x18\x05 \x01(\t\x12T\n\x11table_definitions\x18\x06 \x03(\x0b\x32\x39.google.cloud.audit.BigQueryAuditMetadata.TableDefinition\x12T\n\x08priority\x18\x07 \x01(\x0e\x32\x42.google.cloud.audit.BigQueryAuditMetadata.JobConfig.Query.Priority\x12^\n\x1c\x64\x65stination_table_encryption\x18\x08 \x01(\x0b\x32\x38.google.cloud.audit.BigQueryAuditMetadata.EncryptionInfo\x12T\n\x0estatement_type\x18\t \x01(\x0e\x32<.google.cloud.audit.BigQueryAuditMetadata.QueryStatementType"L\n\x08Priority\x12\x18\n\x14PRIORITY_UNSPECIFIED\x10\x00\x12\x15\n\x11QUERY_INTERACTIVE\x10\x01\x12\x0f\n\x0bQUERY_BATCH\x10\x02\x1a\x99\x03\n\x04Load\x12\x13\n\x0bsource_uris\x18\x01 \x03(\t\x12\x1d\n\x15source_uris_truncated\x18\x07 \x01(\x08\x12\x13\n\x0bschema_json\x18\x02 \x01(\t\x12\x1d\n\x15schema_json_truncated\x18\x08 \x01(\x08\x12\x19\n\x11\x64\x65stination_table\x18\x03 \x01(\t\x12W\n\x12\x63reate_disposition\x18\x04 \x01(\x0e\x32;.google.cloud.audit.BigQueryAuditMetadata.CreateDisposition\x12U\n\x11write_disposition\x18\x05 \x01(\x0e\x32:.google.cloud.audit.BigQueryAuditMetadata.WriteDisposition\x12^\n\x1c\x64\x65stination_table_encryption\x18\x06 \x01(\x0b\x32\x38.google.cloud.audit.BigQueryAuditMetadata.EncryptionInfo\x1a\x81\x01\n\x07\x45xtract\x12\x18\n\x10\x64\x65stination_uris\x18\x01 \x03(\t\x12"\n\x1a\x64\x65stination_uris_truncated\x18\x03 \x01(\x08\x12\x16\n\x0csource_table\x18\x02 \x01(\tH\x00\x12\x16\n\x0csource_model\x18\x04 \x01(\tH\x00\x42\x08\n\x06source\x1a\x80\x04\n\tTableCopy\x12\x15\n\rsource_tables\x18\x01 \x03(\t\x12\x1f\n\x17source_tables_truncated\x18\x06 \x01(\x08\x12\x19\n\x11\x64\x65stination_table\x18\x02 \x01(\t\x12W\n\x12\x63reate_disposition\x18\x03 \x01(\x0e\x32;.google.cloud.audit.BigQueryAuditMetadata.CreateDisposition\x12U\n\x11write_disposition\x18\x04 \x01(\x0e\x32:.google.cloud.audit.BigQueryAuditMetadata.WriteDisposition\x12^\n\x1c\x64\x65stination_table_encryption\x18\x05 \x01(\x0b\x32\x38.google.cloud.audit.BigQueryAuditMetadata.EncryptionInfo\x12O\n\x0eoperation_type\x18\x07 \x01(\x0e\x32\x37.google.cloud.audit.BigQueryAuditMetadata.OperationType\x12?\n\x1b\x64\x65stination_expiration_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01"I\n\x04Type\x12\x14\n\x10TYPE_UNSPECIFIED\x10\x00\x12\t\n\x05QUERY\x10\x01\x12\x08\n\x04\x43OPY\x10\x02\x12\n\n\x06\x45XPORT\x10\x03\x12\n\n\x06IMPORT\x10\x04\x42\x08\n\x06\x63onfig\x1a\x34\n\x0fTableDefinition\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0bsource_uris\x18\x02 \x03(\t\x1a\xa0\x01\n\tJobStatus\x12\x45\n\tjob_state\x18\x01 \x01(\x0e\x32\x32.google.cloud.audit.BigQueryAuditMetadata.JobState\x12(\n\x0c\x65rror_result\x18\x02 \x01(\x0b\x32\x12.google.rpc.Status\x12"\n\x06\x65rrors\x18\x03 \x03(\x0b\x32\x12.google.rpc.Status\x1a\xaa\x07\n\x08JobStats\x12/\n\x0b\x63reate_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nstart_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12,\n\x08\x65nd_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12O\n\x0bquery_stats\x18\x08 \x01(\x0b\x32\x38.google.cloud.audit.BigQueryAuditMetadata.JobStats.QueryH\x00\x12M\n\nload_stats\x18\t \x01(\x0b\x32\x37.google.cloud.audit.BigQueryAuditMetadata.JobStats.LoadH\x00\x12S\n\rextract_stats\x18\r \x01(\x0b\x32:.google.cloud.audit.BigQueryAuditMetadata.JobStats.ExtractH\x00\x12\x15\n\rtotal_slot_ms\x18\n \x01(\x03\x12j\n\x11reservation_usage\x18\x0b \x03(\x0b\x32K.google.cloud.audit.BigQueryAuditMetadata.JobStats.ReservationResourceUsageB\x02\x18\x01\x12\x13\n\x0breservation\x18\x0e \x01(\t\x12\x17\n\x0fparent_job_name\x18\x0c \x01(\t\x1a\xd7\x01\n\x05Query\x12\x1d\n\x15total_processed_bytes\x18\x01 \x01(\x03\x12\x1a\n\x12total_billed_bytes\x18\x02 \x01(\x03\x12\x14\n\x0c\x62illing_tier\x18\x03 \x01(\x05\x12\x19\n\x11referenced_tables\x18\x06 \x03(\t\x12\x18\n\x10referenced_views\x18\x07 \x03(\t\x12\x1b\n\x13referenced_routines\x18\n \x03(\t\x12\x18\n\x10output_row_count\x18\x08 \x01(\x03\x12\x11\n\tcache_hit\x18\t \x01(\x08\x1a"\n\x04Load\x12\x1a\n\x12total_output_bytes\x18\x01 \x01(\x03\x1a$\n\x07\x45xtract\x12\x19\n\x11total_input_bytes\x18\x01 \x01(\x03\x1a\x39\n\x18ReservationResourceUsage\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07slot_ms\x18\x02 \x01(\x03\x42\n\n\x08\x65xtended\x1a\xfa\x03\n\x05Table\x12\x12\n\ntable_name\x18\x01 \x01(\t\x12H\n\ntable_info\x18\n \x01(\x0b\x32\x34.google.cloud.audit.BigQueryAuditMetadata.EntityInfo\x12\x13\n\x0bschema_json\x18\x03 \x01(\t\x12\x1d\n\x15schema_json_truncated\x18\x0b \x01(\x08\x12K\n\x04view\x18\x04 \x01(\x0b\x32=.google.cloud.audit.BigQueryAuditMetadata.TableViewDefinition\x12/\n\x0b\x65xpire_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12/\n\x0b\x63reate_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12/\n\x0bupdate_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x31\n\rtruncate_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12L\n\nencryption\x18\t \x01(\x0b\x32\x38.google.cloud.audit.BigQueryAuditMetadata.EncryptionInfo\x1a\xc6\x02\n\x05Model\x12\x12\n\nmodel_name\x18\x01 \x01(\t\x12H\n\nmodel_info\x18\x02 \x01(\x0b\x32\x34.google.cloud.audit.BigQueryAuditMetadata.EntityInfo\x12/\n\x0b\x65xpire_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12/\n\x0b\x63reate_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12/\n\x0bupdate_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12L\n\nencryption\x18\x08 \x01(\x0b\x32\x38.google.cloud.audit.BigQueryAuditMetadata.EncryptionInfo\x1a\x81\x01\n\x07Routine\x12\x14\n\x0croutine_name\x18\x01 \x01(\t\x12/\n\x0b\x63reate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12/\n\x0bupdate_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x1a\xb9\x01\n\nEntityInfo\x12\x15\n\rfriendly_name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12P\n\x06labels\x18\x03 \x03(\x0b\x32@.google.cloud.audit.BigQueryAuditMetadata.EntityInfo.LabelsEntry\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a=\n\x13TableViewDefinition\x12\r\n\x05query\x18\x01 \x01(\t\x12\x17\n\x0fquery_truncated\x18\x02 \x01(\x08\x1a\xc4\x03\n\x07\x44\x61taset\x12\x14\n\x0c\x64\x61taset_name\x18\x01 \x01(\t\x12J\n\x0c\x64\x61taset_info\x18\x07 \x01(\x0b\x32\x34.google.cloud.audit.BigQueryAuditMetadata.EntityInfo\x12/\n\x0b\x63reate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12/\n\x0bupdate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x42\n\x03\x61\x63l\x18\x05 \x01(\x0b\x32\x35.google.cloud.audit.BigQueryAuditMetadata.BigQueryAcl\x12@\n\x1d\x64\x65\x66\x61ult_table_expire_duration\x18\x06 \x01(\x0b\x32\x19.google.protobuf.Duration\x12T\n\x12\x64\x65\x66\x61ult_encryption\x18\x08 \x01(\x0b\x32\x38.google.cloud.audit.BigQueryAuditMetadata.EncryptionInfo\x12\x19\n\x11\x64\x65\x66\x61ult_collation\x18\t \x01(\t\x1aN\n\x0b\x42igQueryAcl\x12%\n\x06policy\x18\x01 \x01(\x0b\x32\x15.google.iam.v1.Policy\x12\x18\n\x10\x61uthorized_views\x18\x02 \x03(\t\x1a&\n\x0e\x45ncryptionInfo\x12\x14\n\x0ckms_key_name\x18\x01 \x01(\t\x1a\x31\n\x0fRowAccessPolicy\x12\x1e\n\x16row_access_policy_name\x18\x01 \x01(\t\x1ax\n\x15\x46irstPartyAppMetadata\x12S\n\x0fsheets_metadata\x18\x01 \x01(\x0b\x32\x38.google.cloud.audit.BigQueryAuditMetadata.SheetsMetadataH\x00\x42\n\n\x08metadata\x1a \n\x0eSheetsMetadata\x12\x0e\n\x06\x64oc_id\x18\x01 \x01(\t"_\n\x11\x43reateDisposition\x12"\n\x1e\x43REATE_DISPOSITION_UNSPECIFIED\x10\x00\x12\x10\n\x0c\x43REATE_NEVER\x10\x01\x12\x14\n\x10\x43REATE_IF_NEEDED\x10\x02"l\n\x10WriteDisposition\x12!\n\x1dWRITE_DISPOSITION_UNSPECIFIED\x10\x00\x12\x0f\n\x0bWRITE_EMPTY\x10\x01\x12\x12\n\x0eWRITE_TRUNCATE\x10\x02\x12\x10\n\x0cWRITE_APPEND\x10\x03"T\n\rOperationType\x12\x1e\n\x1aOPERATION_TYPE_UNSPECIFIED\x10\x00\x12\x08\n\x04\x43OPY\x10\x01\x12\x0c\n\x08SNAPSHOT\x10\x02\x12\x0b\n\x07RESTORE\x10\x03"I\n\x08JobState\x12\x19\n\x15JOB_STATE_UNSPECIFIED\x10\x00\x12\x0b\n\x07PENDING\x10\x01\x12\x0b\n\x07RUNNING\x10\x02\x12\x08\n\x04\x44ONE\x10\x03"\xf9\x05\n\x12QueryStatementType\x12$\n QUERY_STATEMENT_TYPE_UNSPECIFIED\x10\x00\x12\n\n\x06SELECT\x10\x01\x12\n\n\x06\x41SSERT\x10\x17\x12\n\n\x06INSERT\x10\x02\x12\n\n\x06UPDATE\x10\x03\x12\n\n\x06\x44\x45LETE\x10\x04\x12\t\n\x05MERGE\x10\x05\x12\x10\n\x0c\x43REATE_TABLE\x10\x06\x12\x1a\n\x16\x43REATE_TABLE_AS_SELECT\x10\x07\x12\x0f\n\x0b\x43REATE_VIEW\x10\x08\x12\x10\n\x0c\x43REATE_MODEL\x10\t\x12\x1c\n\x18\x43REATE_MATERIALIZED_VIEW\x10\r\x12\x13\n\x0f\x43REATE_FUNCTION\x10\x0e\x12\x19\n\x15\x43REATE_TABLE_FUNCTION\x10\x38\x12\x14\n\x10\x43REATE_PROCEDURE\x10\x14\x12\x1c\n\x18\x43REATE_ROW_ACCESS_POLICY\x10\x18\x12\x11\n\rCREATE_SCHEMA\x10\x35\x12\x19\n\x15\x43REATE_SNAPSHOT_TABLE\x10;\x12\x0e\n\nDROP_TABLE\x10\n\x12\x17\n\x13\x44ROP_EXTERNAL_TABLE\x10!\x12\r\n\tDROP_VIEW\x10\x0b\x12\x0e\n\nDROP_MODEL\x10\x0c\x12\x1a\n\x16\x44ROP_MATERIALIZED_VIEW\x10\x0f\x12\x11\n\rDROP_FUNCTION\x10\x10\x12\x12\n\x0e\x44ROP_PROCEDURE\x10\x15\x12\x0f\n\x0b\x44ROP_SCHEMA\x10\x36\x12\x1a\n\x16\x44ROP_ROW_ACCESS_POLICY\x10\x19\x12\x17\n\x13\x44ROP_SNAPSHOT_TABLE\x10>\x12\x0f\n\x0b\x41LTER_TABLE\x10\x11\x12\x0e\n\nALTER_VIEW\x10\x12\x12\x1b\n\x17\x41LTER_MATERIALIZED_VIEW\x10\x16\x12\x10\n\x0c\x41LTER_SCHEMA\x10\x37\x12\n\n\x06SCRIPT\x10\x13\x12\x12\n\x0eTRUNCATE_TABLE\x10\x1a\x12\x19\n\x15\x43REATE_EXTERNAL_TABLE\x10\x1b\x12\x0f\n\x0b\x45XPORT_DATA\x10\x1c\x12\x08\n\x04\x43\x41LL\x10\x1d\x42\x07\n\x05\x65ventB\x9f\x01\n\x16\x63om.google.cloud.auditB\x1a\x42igQueryAuditMetadataProtoP\x01Z7google.golang.org/genproto/googleapis/cloud/audit;audit\xa2\x02\x03GCA\xaa\x02\x12Google.Cloud.Audit\xca\x02\x12Google\\Cloud\\Auditb\x06proto3' +) + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages( + DESCRIPTOR, "google.cloud.audit.bigquery_audit_metadata_pb2", _globals +) +if _descriptor._USE_C_DESCRIPTORS == False: + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b"\n\026com.google.cloud.auditB\032BigQueryAuditMetadataProtoP\001Z7google.golang.org/genproto/googleapis/cloud/audit;audit\242\002\003GCA\252\002\022Google.Cloud.Audit\312\002\022Google\\Cloud\\Audit" + _BIGQUERYAUDITMETADATA_JOBCONFIG_LABELSENTRY._options = None + _BIGQUERYAUDITMETADATA_JOBCONFIG_LABELSENTRY._serialized_options = b"8\001" + _BIGQUERYAUDITMETADATA_JOBSTATS.fields_by_name["reservation_usage"]._options = None + _BIGQUERYAUDITMETADATA_JOBSTATS.fields_by_name[ + "reservation_usage" + ]._serialized_options = b"\030\001" + _BIGQUERYAUDITMETADATA_ENTITYINFO_LABELSENTRY._options = None + _BIGQUERYAUDITMETADATA_ENTITYINFO_LABELSENTRY._serialized_options = b"8\001" + _globals["_BIGQUERYAUDITMETADATA"]._serialized_start = 191 + _globals["_BIGQUERYAUDITMETADATA"]._serialized_end = 14442 + _globals["_BIGQUERYAUDITMETADATA_JOBINSERTION"]._serialized_start = 2310 + _globals["_BIGQUERYAUDITMETADATA_JOBINSERTION"]._serialized_end = 2540 + _globals["_BIGQUERYAUDITMETADATA_JOBINSERTION_REASON"]._serialized_start = 2465 + _globals["_BIGQUERYAUDITMETADATA_JOBINSERTION_REASON"]._serialized_end = 2540 + _globals["_BIGQUERYAUDITMETADATA_JOBCHANGE"]._serialized_start = 2543 + _globals["_BIGQUERYAUDITMETADATA_JOBCHANGE"]._serialized_end = 2749 + _globals["_BIGQUERYAUDITMETADATA_JOBDELETION"]._serialized_start = 2752 + _globals["_BIGQUERYAUDITMETADATA_JOBDELETION"]._serialized_end = 2919 + _globals["_BIGQUERYAUDITMETADATA_JOBDELETION_REASON"]._serialized_start = 2863 + _globals["_BIGQUERYAUDITMETADATA_JOBDELETION_REASON"]._serialized_end = 2919 + _globals["_BIGQUERYAUDITMETADATA_DATASETCREATION"]._serialized_start = 2922 + _globals["_BIGQUERYAUDITMETADATA_DATASETCREATION"]._serialized_end = 3164 + _globals["_BIGQUERYAUDITMETADATA_DATASETCREATION_REASON"]._serialized_start = 3109 + _globals["_BIGQUERYAUDITMETADATA_DATASETCREATION_REASON"]._serialized_end = 3164 + _globals["_BIGQUERYAUDITMETADATA_DATASETCHANGE"]._serialized_start = 3167 + _globals["_BIGQUERYAUDITMETADATA_DATASETCHANGE"]._serialized_end = 3425 + _globals["_BIGQUERYAUDITMETADATA_DATASETCHANGE_REASON"]._serialized_start = 3350 + _globals["_BIGQUERYAUDITMETADATA_DATASETCHANGE_REASON"]._serialized_end = 3425 + _globals["_BIGQUERYAUDITMETADATA_DATASETDELETION"]._serialized_start = 3428 + _globals["_BIGQUERYAUDITMETADATA_DATASETDELETION"]._serialized_end = 3602 + _globals["_BIGQUERYAUDITMETADATA_DATASETDELETION_REASON"]._serialized_start = 3547 + _globals["_BIGQUERYAUDITMETADATA_DATASETDELETION_REASON"]._serialized_end = 3602 + _globals["_BIGQUERYAUDITMETADATA_TABLECREATION"]._serialized_start = 3605 + _globals["_BIGQUERYAUDITMETADATA_TABLECREATION"]._serialized_end = 3862 + _globals["_BIGQUERYAUDITMETADATA_TABLECREATION_REASON"]._serialized_start = 3784 + _globals["_BIGQUERYAUDITMETADATA_TABLECREATION_REASON"]._serialized_end = 3862 + _globals["_BIGQUERYAUDITMETADATA_MODELCREATION"]._serialized_start = 3865 + _globals["_BIGQUERYAUDITMETADATA_MODELCREATION"]._serialized_end = 4087 + _globals["_BIGQUERYAUDITMETADATA_MODELCREATION_REASON"]._serialized_start = 4044 + _globals["_BIGQUERYAUDITMETADATA_MODELCREATION_REASON"]._serialized_end = 4087 + _globals["_BIGQUERYAUDITMETADATA_ROUTINECREATION"]._serialized_start = 4090 + _globals["_BIGQUERYAUDITMETADATA_ROUTINECREATION"]._serialized_end = 4348 + _globals["_BIGQUERYAUDITMETADATA_ROUTINECREATION_REASON"]._serialized_start = 4277 + _globals["_BIGQUERYAUDITMETADATA_ROUTINECREATION_REASON"]._serialized_end = 4348 + _globals["_BIGQUERYAUDITMETADATA_TABLEDATAREAD"]._serialized_start = 4351 + _globals["_BIGQUERYAUDITMETADATA_TABLEDATAREAD"]._serialized_end = 4758 + _globals["_BIGQUERYAUDITMETADATA_TABLEDATAREAD_REASON"]._serialized_start = 4583 + _globals["_BIGQUERYAUDITMETADATA_TABLEDATAREAD_REASON"]._serialized_end = 4758 + _globals["_BIGQUERYAUDITMETADATA_TABLECHANGE"]._serialized_start = 4761 + _globals["_BIGQUERYAUDITMETADATA_TABLECHANGE"]._serialized_end = 5033 + _globals["_BIGQUERYAUDITMETADATA_TABLECHANGE_REASON"]._serialized_start = 4955 + _globals["_BIGQUERYAUDITMETADATA_TABLECHANGE_REASON"]._serialized_end = 5033 + _globals["_BIGQUERYAUDITMETADATA_MODELMETADATACHANGE"]._serialized_start = 5036 + _globals["_BIGQUERYAUDITMETADATA_MODELMETADATACHANGE"]._serialized_end = 5295 + _globals[ + "_BIGQUERYAUDITMETADATA_MODELMETADATACHANGE_REASON" + ]._serialized_start = 5227 + _globals["_BIGQUERYAUDITMETADATA_MODELMETADATACHANGE_REASON"]._serialized_end = 5295 + _globals["_BIGQUERYAUDITMETADATA_ROUTINECHANGE"]._serialized_start = 5298 + _globals["_BIGQUERYAUDITMETADATA_ROUTINECHANGE"]._serialized_end = 5552 + _globals["_BIGQUERYAUDITMETADATA_ROUTINECHANGE_REASON"]._serialized_start = 5481 + _globals["_BIGQUERYAUDITMETADATA_ROUTINECHANGE_REASON"]._serialized_end = 5552 + _globals["_BIGQUERYAUDITMETADATA_TABLEDATACHANGE"]._serialized_start = 5555 + _globals["_BIGQUERYAUDITMETADATA_TABLEDATACHANGE"]._serialized_end = 5869 + _globals["_BIGQUERYAUDITMETADATA_TABLEDATACHANGE_REASON"]._serialized_start = 5771 + _globals["_BIGQUERYAUDITMETADATA_TABLEDATACHANGE_REASON"]._serialized_end = 5869 + _globals["_BIGQUERYAUDITMETADATA_MODELDATACHANGE"]._serialized_start = 5872 + _globals["_BIGQUERYAUDITMETADATA_MODELDATACHANGE"]._serialized_end = 6034 + _globals["_BIGQUERYAUDITMETADATA_MODELDATACHANGE_REASON"]._serialized_start = 4277 + _globals["_BIGQUERYAUDITMETADATA_MODELDATACHANGE_REASON"]._serialized_end = 4320 + _globals["_BIGQUERYAUDITMETADATA_MODELDATAREAD"]._serialized_start = 6037 + _globals["_BIGQUERYAUDITMETADATA_MODELDATAREAD"]._serialized_end = 6193 + _globals["_BIGQUERYAUDITMETADATA_MODELDATAREAD_REASON"]._serialized_start = 3784 + _globals["_BIGQUERYAUDITMETADATA_MODELDATAREAD_REASON"]._serialized_end = 3825 + _globals["_BIGQUERYAUDITMETADATA_TABLEDELETION"]._serialized_start = 6196 + _globals["_BIGQUERYAUDITMETADATA_TABLEDELETION"]._serialized_end = 6393 + _globals["_BIGQUERYAUDITMETADATA_TABLEDELETION_REASON"]._serialized_start = 6311 + _globals["_BIGQUERYAUDITMETADATA_TABLEDELETION_REASON"]._serialized_end = 6393 + _globals["_BIGQUERYAUDITMETADATA_MODELDELETION"]._serialized_start = 6396 + _globals["_BIGQUERYAUDITMETADATA_MODELDELETION"]._serialized_end = 6593 + _globals["_BIGQUERYAUDITMETADATA_MODELDELETION_REASON"]._serialized_start = 6511 + _globals["_BIGQUERYAUDITMETADATA_MODELDELETION_REASON"]._serialized_end = 6593 + _globals["_BIGQUERYAUDITMETADATA_ROUTINEDELETION"]._serialized_start = 6596 + _globals["_BIGQUERYAUDITMETADATA_ROUTINEDELETION"]._serialized_end = 6854 + _globals["_BIGQUERYAUDITMETADATA_ROUTINEDELETION_REASON"]._serialized_start = 6783 + _globals["_BIGQUERYAUDITMETADATA_ROUTINEDELETION_REASON"]._serialized_end = 6854 + _globals["_BIGQUERYAUDITMETADATA_ROWACCESSPOLICYCREATION"]._serialized_start = 6857 + _globals["_BIGQUERYAUDITMETADATA_ROWACCESSPOLICYCREATION"]._serialized_end = 6986 + _globals["_BIGQUERYAUDITMETADATA_ROWACCESSPOLICYCHANGE"]._serialized_start = 6988 + _globals["_BIGQUERYAUDITMETADATA_ROWACCESSPOLICYCHANGE"]._serialized_end = 7115 + _globals["_BIGQUERYAUDITMETADATA_ROWACCESSPOLICYDELETION"]._serialized_start = 7118 + _globals["_BIGQUERYAUDITMETADATA_ROWACCESSPOLICYDELETION"]._serialized_end = 7290 + _globals["_BIGQUERYAUDITMETADATA_UNLINKDATASET"]._serialized_start = 7293 + _globals["_BIGQUERYAUDITMETADATA_UNLINKDATASET"]._serialized_end = 7486 + _globals["_BIGQUERYAUDITMETADATA_UNLINKDATASET_REASON"]._serialized_start = 7438 + _globals["_BIGQUERYAUDITMETADATA_UNLINKDATASET_REASON"]._serialized_end = 7486 + _globals["_BIGQUERYAUDITMETADATA_JOB"]._serialized_start = 7489 + _globals["_BIGQUERYAUDITMETADATA_JOB"]._serialized_end = 7729 + _globals["_BIGQUERYAUDITMETADATA_JOBCONFIG"]._serialized_start = 7732 + _globals["_BIGQUERYAUDITMETADATA_JOBCONFIG"]._serialized_end = 10140 + _globals["_BIGQUERYAUDITMETADATA_JOBCONFIG_QUERY"]._serialized_start = 8242 + _globals["_BIGQUERYAUDITMETADATA_JOBCONFIG_QUERY"]._serialized_end = 8949 + _globals["_BIGQUERYAUDITMETADATA_JOBCONFIG_QUERY_PRIORITY"]._serialized_start = 8873 + _globals["_BIGQUERYAUDITMETADATA_JOBCONFIG_QUERY_PRIORITY"]._serialized_end = 8949 + _globals["_BIGQUERYAUDITMETADATA_JOBCONFIG_LOAD"]._serialized_start = 8952 + _globals["_BIGQUERYAUDITMETADATA_JOBCONFIG_LOAD"]._serialized_end = 9361 + _globals["_BIGQUERYAUDITMETADATA_JOBCONFIG_EXTRACT"]._serialized_start = 9364 + _globals["_BIGQUERYAUDITMETADATA_JOBCONFIG_EXTRACT"]._serialized_end = 9493 + _globals["_BIGQUERYAUDITMETADATA_JOBCONFIG_TABLECOPY"]._serialized_start = 9496 + _globals["_BIGQUERYAUDITMETADATA_JOBCONFIG_TABLECOPY"]._serialized_end = 10008 + _globals["_BIGQUERYAUDITMETADATA_JOBCONFIG_LABELSENTRY"]._serialized_start = 10010 + _globals["_BIGQUERYAUDITMETADATA_JOBCONFIG_LABELSENTRY"]._serialized_end = 10055 + _globals["_BIGQUERYAUDITMETADATA_JOBCONFIG_TYPE"]._serialized_start = 10057 + _globals["_BIGQUERYAUDITMETADATA_JOBCONFIG_TYPE"]._serialized_end = 10130 + _globals["_BIGQUERYAUDITMETADATA_TABLEDEFINITION"]._serialized_start = 10142 + _globals["_BIGQUERYAUDITMETADATA_TABLEDEFINITION"]._serialized_end = 10194 + _globals["_BIGQUERYAUDITMETADATA_JOBSTATUS"]._serialized_start = 10197 + _globals["_BIGQUERYAUDITMETADATA_JOBSTATUS"]._serialized_end = 10357 + _globals["_BIGQUERYAUDITMETADATA_JOBSTATS"]._serialized_start = 10360 + _globals["_BIGQUERYAUDITMETADATA_JOBSTATS"]._serialized_end = 11298 + _globals["_BIGQUERYAUDITMETADATA_JOBSTATS_QUERY"]._serialized_start = 10938 + _globals["_BIGQUERYAUDITMETADATA_JOBSTATS_QUERY"]._serialized_end = 11153 + _globals["_BIGQUERYAUDITMETADATA_JOBSTATS_LOAD"]._serialized_start = 11155 + _globals["_BIGQUERYAUDITMETADATA_JOBSTATS_LOAD"]._serialized_end = 11189 + _globals["_BIGQUERYAUDITMETADATA_JOBSTATS_EXTRACT"]._serialized_start = 11191 + _globals["_BIGQUERYAUDITMETADATA_JOBSTATS_EXTRACT"]._serialized_end = 11227 + _globals[ + "_BIGQUERYAUDITMETADATA_JOBSTATS_RESERVATIONRESOURCEUSAGE" + ]._serialized_start = 11229 + _globals[ + "_BIGQUERYAUDITMETADATA_JOBSTATS_RESERVATIONRESOURCEUSAGE" + ]._serialized_end = 11286 + _globals["_BIGQUERYAUDITMETADATA_TABLE"]._serialized_start = 11301 + _globals["_BIGQUERYAUDITMETADATA_TABLE"]._serialized_end = 11807 + _globals["_BIGQUERYAUDITMETADATA_MODEL"]._serialized_start = 11810 + _globals["_BIGQUERYAUDITMETADATA_MODEL"]._serialized_end = 12136 + _globals["_BIGQUERYAUDITMETADATA_ROUTINE"]._serialized_start = 12139 + _globals["_BIGQUERYAUDITMETADATA_ROUTINE"]._serialized_end = 12268 + _globals["_BIGQUERYAUDITMETADATA_ENTITYINFO"]._serialized_start = 12271 + _globals["_BIGQUERYAUDITMETADATA_ENTITYINFO"]._serialized_end = 12456 + _globals["_BIGQUERYAUDITMETADATA_ENTITYINFO_LABELSENTRY"]._serialized_start = 10010 + _globals["_BIGQUERYAUDITMETADATA_ENTITYINFO_LABELSENTRY"]._serialized_end = 10055 + _globals["_BIGQUERYAUDITMETADATA_TABLEVIEWDEFINITION"]._serialized_start = 12458 + _globals["_BIGQUERYAUDITMETADATA_TABLEVIEWDEFINITION"]._serialized_end = 12519 + _globals["_BIGQUERYAUDITMETADATA_DATASET"]._serialized_start = 12522 + _globals["_BIGQUERYAUDITMETADATA_DATASET"]._serialized_end = 12974 + _globals["_BIGQUERYAUDITMETADATA_BIGQUERYACL"]._serialized_start = 12976 + _globals["_BIGQUERYAUDITMETADATA_BIGQUERYACL"]._serialized_end = 13054 + _globals["_BIGQUERYAUDITMETADATA_ENCRYPTIONINFO"]._serialized_start = 13056 + _globals["_BIGQUERYAUDITMETADATA_ENCRYPTIONINFO"]._serialized_end = 13094 + _globals["_BIGQUERYAUDITMETADATA_ROWACCESSPOLICY"]._serialized_start = 13096 + _globals["_BIGQUERYAUDITMETADATA_ROWACCESSPOLICY"]._serialized_end = 13145 + _globals["_BIGQUERYAUDITMETADATA_FIRSTPARTYAPPMETADATA"]._serialized_start = 13147 + _globals["_BIGQUERYAUDITMETADATA_FIRSTPARTYAPPMETADATA"]._serialized_end = 13267 + _globals["_BIGQUERYAUDITMETADATA_SHEETSMETADATA"]._serialized_start = 13269 + _globals["_BIGQUERYAUDITMETADATA_SHEETSMETADATA"]._serialized_end = 13301 + _globals["_BIGQUERYAUDITMETADATA_CREATEDISPOSITION"]._serialized_start = 13303 + _globals["_BIGQUERYAUDITMETADATA_CREATEDISPOSITION"]._serialized_end = 13398 + _globals["_BIGQUERYAUDITMETADATA_WRITEDISPOSITION"]._serialized_start = 13400 + _globals["_BIGQUERYAUDITMETADATA_WRITEDISPOSITION"]._serialized_end = 13508 + _globals["_BIGQUERYAUDITMETADATA_OPERATIONTYPE"]._serialized_start = 13510 + _globals["_BIGQUERYAUDITMETADATA_OPERATIONTYPE"]._serialized_end = 13594 + _globals["_BIGQUERYAUDITMETADATA_JOBSTATE"]._serialized_start = 13596 + _globals["_BIGQUERYAUDITMETADATA_JOBSTATE"]._serialized_end = 13669 + _globals["_BIGQUERYAUDITMETADATA_QUERYSTATEMENTTYPE"]._serialized_start = 13672 + _globals["_BIGQUERYAUDITMETADATA_QUERYSTATEMENTTYPE"]._serialized_end = 14433 +# @@protoc_insertion_point(module_scope) diff --git a/noxfile.py b/noxfile.py index 6ae7f19..5388750 100644 --- a/noxfile.py +++ b/noxfile.py @@ -13,63 +13,49 @@ # limitations under the License. import os - +import pathlib from pathlib import Path +import re +import shutil +import tempfile + import nox +BLACK_VERSION = "black==22.3.0" +LINT_PATHS = ["google", "noxfile.py", "setup.py"] + + +# `grpcio-tools` 1.59.0 or newer is required for protobuf 5.x compatibility. +GRPCIO_TOOLS_VERSION = "grpcio-tools==1.59.0" + +CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute() +UNIT_TEST_PYTHON_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"] + nox.options.sessions = [ - "unit", + "unit_local", + "unit_remote", "blacken", "lint_setup_py", + "lint", ] # Error if a python version is missing nox.options.error_on_missing_interpreters = True -BLACK_VERSION = "black==19.3b0" - -# NOTE: Pin the version of grpcio-tools to 1.48.2 for compatibility with -# Protobuf 3.19.5. Please ensure that the minimum required version of -# protobuf in setup.py is compatible with the pb2 files generated -# by grpcio-tools before changing the pinned version below. -GRPCIO_TOOLS_VERSION = "grpcio-tools==1.48.2" - @nox.session(python="3.8") def blacken(session): """Run black. Format code to uniform standard. + This currently uses Python 3.6 due to the automated Kokoro run of synthtool. + That run uses an image that doesn't have 3.6 installed. Before updating this + check the state of the `gcp_ubuntu_config` we use for that Kokoro run. """ - session.install(BLACK_VERSION, "click<8.1.0") + session.install(BLACK_VERSION) session.run("black", "google", "setup.py") - -@nox.session(python="3.8") -def generate_protos(session): - """Generates the protos using protoc. - Some notes on the `google` directory: - 1. The `_pb2.py` files are produced by protoc. - 2. The .proto files are non-functional but are left in the repository - to make it easier to understand diffs. - 3. The `google` directory also has `__init__.py` files to create proper modules. - If a new subdirectory is added, you will need to create more `__init__.py` - files. - NOTE: This should be migrated to use bazel in the future. - """ - session.install(GRPCIO_TOOLS_VERSION) - protos = [str(p) for p in (Path(".").glob("google/**/*.proto"))] - - session.run( - "python", - "-m", - "grpc_tools.protoc", - "--proto_path=.", - "--python_out=.", - *protos, - ) - @nox.session(python="3.8") def lint_setup_py(session): """Verify that setup.py is valid""" @@ -77,26 +63,311 @@ def lint_setup_py(session): session.run("python", "setup.py", "check", "--strict") -def default(session): +def unit(session, repository, package, prerelease, protobuf_implementation): + """Run the unit test suite.""" + downstream_dir = repository + if package: + downstream_dir = f"{repository}/packages/{package}" + # Install all test dependencies, then install this package in-place. - session.install("mock", "pytest", "pytest-cov") - session.install("-e", ".") + session.install("asyncmock", "pytest-asyncio") + + # Pin mock due to https://github.com/googleapis/python-pubsub/issues/840 + session.install("mock==5.0.0", "pytest", "pytest-cov") + + install_command = ["-e", f"{CURRENT_DIRECTORY}/{downstream_dir}"] + + if prerelease: + install_prerelease_dependencies( + session, + f"{CURRENT_DIRECTORY}/{downstream_dir}/testing/constraints-{UNIT_TEST_PYTHON_VERSIONS[0]}.txt", + ) + # Use the `--no-deps` options to allow pre-release versions of dependencies to be installed + install_command.extend(["--no-deps"]) + else: + # Install the pinned dependencies in constraints file + install_command.extend( + [ + "-c", + f"{CURRENT_DIRECTORY}/{downstream_dir}/testing/constraints-{session.python}.txt", + ] + ) + + # These *must* be the last 3 install commands to get the packages from source. + session.install(*install_command) + + # Remove the 'cpp' implementation once support for Protobuf 3.x is dropped. + # The 'cpp' implementation requires Protobuf<4. + if protobuf_implementation == "cpp": + session.install("protobuf<4") + + # Install this library from source + session.install(CURRENT_DIRECTORY, "--no-deps") + + # Print out package versions of dependencies + session.run( + "python", "-c", "import google.protobuf; print(google.protobuf.__version__)" + ) + session.run("python", "-c", "import grpc; print(grpc.__version__)") + session.run("python", "-c", "import google.auth; print(google.auth.__version__)") + + session.run( + "python", "-c", "import google.api_core; print(google.api_core.__version__)" + ) + + # Run py.test against the unit tests in the downstream repository + with session.chdir(downstream_dir): + # Run py.test against the unit tests. + session.run( + "py.test", + "--quiet", + "--cov=google/cloud", + "--cov=tests/unit", + "--cov-append", + "--cov-config=.coveragerc", + "--cov-report=", + "--cov-fail-under=0", + os.path.join("tests", "unit"), + *session.posargs, + env={ + "PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION": protobuf_implementation, + }, + ) + + +def install_prerelease_dependencies(session, constraints_path): + with open(constraints_path, encoding="utf-8") as constraints_file: + constraints_text = constraints_file.read() + # Ignore leading whitespace and comment lines. + constraints_deps = [ + match.group(1) + for match in re.finditer( + r"^\s*(\S+)(?===\S+)", constraints_text, flags=re.MULTILINE + ) + ] + session.install(*constraints_deps) + prerel_deps = [ + "googleapis-common-protos", + "protobuf", + "six", + "grpcio", + "grpcio-status", + "google-api-core", + "google-auth", + "proto-plus", + "google-cloud-testutils", + "google-cloud-appengine-logging", + "grpc-google-iam-v1", + # dependencies of google-cloud-testutils" + "click", + ] + + for dep in prerel_deps: + session.install("--pre", "--no-deps", "--upgrade", dep) + + # Remaining dependencies + other_deps = [ + "requests", + ] + session.install(*other_deps) + + +@nox.session(python=UNIT_TEST_PYTHON_VERSIONS) +@nox.parametrize( + "library,prerelease,protobuf_implementation", + [ + (("python-logging", None), False, "python"), + (("python-logging", None), False, "upb"), + (("python-logging", None), False, "cpp"), + (("python-logging", None), True, "python"), + (("python-logging", None), True, "upb"), + (("python-logging", None), True, "cpp"), + ], +) +def unit_remote(session, library, prerelease, protobuf_implementation): + """Run tests from a downstream libraries. + + To verify that any changes we make here will not break downstream libraries, clone + a few and run their unit and system tests. + + NOTE: The unit and system test functions above are copied from the templates. + They will need to be updated when the templates change. + + * Logging: GAPIC which uses `google-cloud-audit-log` + """ + + if protobuf_implementation == "cpp" and session.python in ("3.11", "3.12"): + session.skip("cpp implementation is not supported in python 3.11+") + + repository, package = library + with tempfile.TemporaryDirectory() as working_dir: + session.run( + "git", + "clone", + "--single-branch", + f"https://github.com/googleapis/{repository}", + f"{working_dir}/{repository}", + external=True, + ) + + downstream_dir = f"{working_dir}/{repository}" + if package: + downstream_dir = f"{working_dir}/{repository}/packages/{package}" + + # Install all test dependencies, then install this package in-place. + session.install("asyncmock", "pytest-asyncio") + + session.install("mock", "pytest", "pytest-cov") + + install_command = ["-e", downstream_dir] + + # include dependencies needed for testing python-logging + session.install("django", "flask", "opentelemetry-api") + if prerelease: + install_prerelease_dependencies( + session, + f"{downstream_dir}/testing/constraints-{UNIT_TEST_PYTHON_VERSIONS[0]}.txt", + ) + # Use the `--no-deps` options to allow pre-release versions of dependencies to be installed + install_command.extend(["--no-deps"]) + else: + # Install the pinned dependencies in constraints file + install_command.extend( + [ + "-c", + f"{downstream_dir}/testing/constraints-{session.python}.txt", + ] + ) + + # These *must* be the last 3 install commands to get the packages from source. + session.install(*install_command) + + # Remove the 'cpp' implementation once support for Protobuf 3.x is dropped. + # The 'cpp' implementation requires Protobuf<4. + if protobuf_implementation == "cpp": + session.install("protobuf<4") + + # Install this library from source + session.install(CURRENT_DIRECTORY, "--no-deps") + + # Print out package versions of dependencies + session.run( + "python", "-c", "import google.protobuf; print(google.protobuf.__version__)" + ) + session.run("python", "-c", "import grpc; print(grpc.__version__)") + session.run( + "python", "-c", "import google.auth; print(google.auth.__version__)" + ) + + session.run( + "python", "-c", "import google.api_core; print(google.api_core.__version__)" + ) + + # Run py.test against the unit tests in the downstream repository + with session.chdir(downstream_dir): + # Run py.test against the unit tests. + session.run( + "py.test", + "--quiet", + "--cov=google/cloud", + "--cov=tests/unit", + "--cov-append", + "--cov-config=.coveragerc", + "--cov-report=", + "--cov-fail-under=0", + os.path.join("tests", "unit"), + *session.posargs, + env={ + "PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION": protobuf_implementation, + }, + ) + + +@nox.session(python=UNIT_TEST_PYTHON_VERSIONS) +@nox.parametrize("protobuf_implementation", ["python", "upb", "cpp"]) +def unit_local(session, protobuf_implementation): + """Run tests in this local repo.""" + # Install all test dependencies, then install this package in-place. + + # TODO(https://github.com/googleapis/proto-plus-python/issues/389): + # Remove the 'cpp' implementation once support for Protobuf 3.x is dropped. + # The 'cpp' implementation requires Protobuf == 3.x however version 3.x + # does not support Python 3.11 and newer. The 'cpp' implementation + # must be excluded from the test matrix for these runtimes. + if protobuf_implementation == "cpp" and session.python in ("3.11", "3.12"): + session.skip("cpp implementation is not supported in python 3.11+") + + constraints_path = str( + CURRENT_DIRECTORY / "testing" / f"constraints-{session.python}.txt" + ) + session.install( + "mock", + "asyncmock", + "pytest", + "pytest-cov", + "pytest-asyncio", + "-c", + constraints_path, + ) + + session.install("-e", ".", "-c", constraints_path) + + # Remove the 'cpp' implementation once support for Protobuf 3.x is dropped. + # The 'cpp' implementation requires Protobuf<4. + if protobuf_implementation == "cpp": + session.install("protobuf<4") # Run py.test against the unit tests. session.run( "py.test", "--quiet", - "--cov=google.cloud", - "--cov=tests.unit", + f"--junitxml=unit_{session.python}_sponge_log.xml", + "--cov=google", + "--cov=tests/unit", "--cov-append", "--cov-config=.coveragerc", "--cov-report=", "--cov-fail-under=0", os.path.join("tests", "unit"), *session.posargs, + env={ + "PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION": protobuf_implementation, + }, ) + @nox.session(python="3.8") -def unit(session): - """Run the unit test suite.""" - default(session) +def generate_protos(session): + """Generates the protos using protoc. + + This session but be last to avoid overwriting the protos used in CI runs. + + Some notes on the `google` directory: + 1. The `_pb2.py` files are produced by protoc. + 2. The .proto files are non-functional but are left in the repository + to make it easier to understand diffs. + 3. The `google` directory also has `__init__.py` files to create proper modules. + If a new subdirectory is added, you will need to create more `__init__.py` + files. + """ + + session.install(GRPCIO_TOOLS_VERSION) + protos = [str(p) for p in (Path(".").glob("google/**/*.proto"))] + session.run( + "python", "-m", "grpc_tools.protoc", "--proto_path=.", "--python_out=.", *protos + ) + + +@nox.session(python="3.8") +def lint(session): + """Run linters. + + Returns a failure if the linters find linting errors or sufficiently + serious code quality issues. + """ + session.install("flake8", BLACK_VERSION) + session.run( + "black", + "--check", + *LINT_PATHS, + ) diff --git a/owlbot.py b/owlbot.py index 924c8af..3e12400 100644 --- a/owlbot.py +++ b/owlbot.py @@ -24,7 +24,7 @@ GOOGLEAPIS_REPO = "googleapis/googleapis" # Clean up googleapis -shutil.rmtree('googleapis', ignore_errors=True) +shutil.rmtree("googleapis", ignore_errors=True) # Clone googleapis googleapis_url = git.make_repo_clone_url(GOOGLEAPIS_REPO) @@ -33,13 +33,28 @@ # This is required in order for s.copy() to work s._tracked_paths.add("googleapis") -os.makedirs("google/rpc/context", exist_ok=True) - +# Create folders for dependencies of the protos that we want to compile +common_apis = [ + "google/api", + "google/iam/v1", + "google/rpc", + "google/rpc/context", + "google/type", +] +_ = [os.makedirs(dir, exist_ok=True) for dir in common_apis] + +# Copy dependencies of the protos that we want to compile from googleapis +s.copy("googleapis/google/api/*.proto", "google/api") +s.copy("googleapis/google/iam/v1/*.proto", "google/iam/v1") s.copy("googleapis/google/rpc/context/attribute_context.proto", "google/rpc/context") s.copy("googleapis/google/rpc/status.proto", "google/rpc") +s.copy("googleapis/google/type/*.proto", "google/type") + +# Copy the protos that we want to compile from googleapis +s.copy("googleapis/google/cloud/audit/*.proto", "google/cloud/audit") # Clean up googleapis -shutil.rmtree('googleapis') +shutil.rmtree("googleapis") # ---------------------------------------------------------------------------- # Add templated files @@ -61,34 +76,11 @@ # Generate _pb2.py files and format them s.shell.run(["nox", "-s", "generate_protos"], hide_output=False) -# Clean up googleapis -shutil.rmtree('google/rpc') +# Clean up the folders for dependencies which are shipped via `googleapis-common-protos` +# We should not ship them via this repository +_ = [shutil.rmtree(dir, ignore_errors=True) for dir in common_apis] s.shell.run(["nox", "-s", "blacken"], hide_output=False) # Add license headers python.fix_pb2_headers() - -LICENSE = """ -# Copyright 2020 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# 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.""" - -PB2_GRPC_HEADER = r"""(\# Generated by the gRPC Python protocol compiler plugin\. DO NOT EDIT!$) -(.*?$)""" - -s.replace( - "**/*_pb2_grpc.py", - PB2_GRPC_HEADER, - fr"{LICENSE}\n\n\g<1>\n\n\g<2>", # add line breaks to avoid stacking replacements -) diff --git a/setup.cfg b/setup.cfg index c3a2b39..0523500 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright 2020 Google LLC +# Copyright 2023 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/setup.py b/setup.py index 4c5ccbb..8ce4eaa 100644 --- a/setup.py +++ b/setup.py @@ -16,14 +16,14 @@ import os import setuptools -from setuptools import setup, find_packages +from setuptools import find_namespace_packages name = "google-cloud-audit-log" description = "Google Cloud Audit Protos" -version = "0.2.5" +version = "0.3.0" release_status = "Development Status :: 4 - Beta" dependencies = [ - "protobuf>=3.19.5,<5.0.0dev,!=3.20.0,!=3.20.1,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", + "protobuf>=3.20.2,<6.0.0dev,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", "googleapis-common-protos >= 1.56.2, < 2.0dev", ] @@ -45,11 +45,12 @@ "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", "Programming Language :: Python :: Implementation :: CPython", ], description=description, @@ -57,10 +58,9 @@ long_description_content_type="text/markdown", install_requires=dependencies, license="Apache-2.0", - packages=find_packages(), + packages=find_namespace_packages(exclude=("tests*", "testing*")), package_data={"": ["*.proto"]}, python_requires=">=3.7", - namespace_packages=["google", "google.cloud"], url="https://github.com/googleapis/python-audit-log", include_package_data=True, ) diff --git a/google/__init__.py b/testing/constraints-3.10.txt similarity index 64% rename from google/__init__.py rename to testing/constraints-3.10.txt index 9a1b64a..6d5e14b 100644 --- a/google/__init__.py +++ b/testing/constraints-3.10.txt @@ -1,24 +1,13 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2020 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # -# https://www.apache.org/licenses/LICENSE-2.0 +# 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. - -try: - import pkg_resources - - pkg_resources.declare_namespace(__name__) -except ImportError: - import pkgutil - - __path__ = pkgutil.extend_path(__path__, __name__) diff --git a/google/cloud/__init__.py b/testing/constraints-3.11.txt similarity index 64% rename from google/cloud/__init__.py rename to testing/constraints-3.11.txt index 9a1b64a..6d5e14b 100644 --- a/google/cloud/__init__.py +++ b/testing/constraints-3.11.txt @@ -1,24 +1,13 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2020 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # -# https://www.apache.org/licenses/LICENSE-2.0 +# 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. - -try: - import pkg_resources - - pkg_resources.declare_namespace(__name__) -except ImportError: - import pkgutil - - __path__ = pkgutil.extend_path(__path__, __name__) diff --git a/testing/constraints-3.12.txt b/testing/constraints-3.12.txt new file mode 100644 index 0000000..6d5e14b --- /dev/null +++ b/testing/constraints-3.12.txt @@ -0,0 +1,13 @@ +# Copyright 2024 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. diff --git a/testing/constraints-3.7.txt b/testing/constraints-3.7.txt new file mode 100644 index 0000000..815739a --- /dev/null +++ b/testing/constraints-3.7.txt @@ -0,0 +1,22 @@ +# Copyright 2024 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. +# Pin the version to the lower bound. +# 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 +protobuf==3.20.2 +googleapis-common-protos==1.56.2 diff --git a/testing/constraints-3.8.txt b/testing/constraints-3.8.txt new file mode 100644 index 0000000..6d5e14b --- /dev/null +++ b/testing/constraints-3.8.txt @@ -0,0 +1,13 @@ +# Copyright 2024 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. diff --git a/testing/constraints-3.9.txt b/testing/constraints-3.9.txt new file mode 100644 index 0000000..6d5e14b --- /dev/null +++ b/testing/constraints-3.9.txt @@ -0,0 +1,13 @@ +# Copyright 2024 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. diff --git a/tests/unit/test_packaging.py b/tests/unit/test_packaging.py new file mode 100644 index 0000000..80b0aa0 --- /dev/null +++ b/tests/unit/test_packaging.py @@ -0,0 +1,39 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import subprocess +import sys + + +# See https://docs.pytest.org/en/stable/how-to/tmp_path.html#the-tmp-path-fixture +# for more information on the `tmp_path` fixture of pytest +def test_namespace_package_compat(tmp_path): + # The ``google`` namespace package should not be masked + # by the presence of ``google-cloud-audit-log``. + google = tmp_path / "google" + google.mkdir() + google.joinpath("othermod.py").write_text("") + env = dict(os.environ, PYTHONPATH=str(tmp_path)) + cmd = [sys.executable, "-m", "google.othermod"] + subprocess.check_call(cmd, env=env) + + # The ``google.cloud`` namespace package should not be masked + # by the presence of ``google-cloud-audit-log`. + google_cloud = tmp_path / "google" / "cloud" + google_cloud.mkdir() + google_cloud.joinpath("othermod.py").write_text("") + env = dict(os.environ, PYTHONPATH=str(tmp_path)) + cmd = [sys.executable, "-m", "google.cloud.othermod"] + subprocess.check_call(cmd, env=env)