From 67459e21eb2446fd391aac8213b66436bb6c5d62 Mon Sep 17 00:00:00 2001
From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com>
Date: Thu, 17 Jun 2021 10:52:27 +0000
Subject: [PATCH 1/8] chore: new owl bot post processor docker image (#90)
Post-Processor: gcr.io/repo-automation-bots/owlbot-python:latest@sha256:58c7342b0bccf85028100adaa3d856cb4a871c22ca9c01960d996e66c40548ce
---
.github/.OwlBot.lock.yaml | 2 +-
docs/conf.py | 12 ++++++------
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml
index 4ef4414..ea06d39 100644
--- a/.github/.OwlBot.lock.yaml
+++ b/.github/.OwlBot.lock.yaml
@@ -1,3 +1,3 @@
docker:
image: gcr.io/repo-automation-bots/owlbot-python:latest
- digest: sha256:c66ba3c8d7bc8566f47df841f98cd0097b28fff0b1864c86f5817f4c8c3e8600
\ No newline at end of file
+ digest: sha256:58c7342b0bccf85028100adaa3d856cb4a871c22ca9c01960d996e66c40548ce
diff --git a/docs/conf.py b/docs/conf.py
index cd4b9c2..54a0a70 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -80,9 +80,9 @@
master_doc = "index"
# General information about the project.
-project = u"google-cloud-webrisk"
-copyright = u"2019, Google"
-author = u"Google APIs"
+project = "google-cloud-webrisk"
+copyright = "2019, Google"
+author = "Google APIs"
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
@@ -281,7 +281,7 @@
(
master_doc,
"google-cloud-webrisk.tex",
- u"google-cloud-webrisk Documentation",
+ "google-cloud-webrisk Documentation",
author,
"manual",
)
@@ -316,7 +316,7 @@
(
master_doc,
"google-cloud-webrisk",
- u"google-cloud-webrisk Documentation",
+ "google-cloud-webrisk Documentation",
[author],
1,
)
@@ -335,7 +335,7 @@
(
master_doc,
"google-cloud-webrisk",
- u"google-cloud-webrisk Documentation",
+ "google-cloud-webrisk Documentation",
author,
"google-cloud-webrisk",
"google-cloud-webrisk Library",
From fe10bdc4e887621002230c175f3a93916b6d81ca Mon Sep 17 00:00:00 2001
From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com>
Date: Sat, 19 Jun 2021 01:38:05 +0000
Subject: [PATCH 2/8] docs: omit mention of Python 2.7 in 'CONTRIBUTING.rst'
(#1127) (#91)
Closes #1126
Source-Link: https://github.com/googleapis/synthtool/commit/b91f129527853d5b756146a0b5044481fb4e09a8
Post-Processor: gcr.io/repo-automation-bots/owlbot-python:latest@sha256:b6169fc6a5207b11800a7c002d0c5c2bc6d82697185ca12e666f44031468cfcd
---
.github/.OwlBot.lock.yaml | 2 +-
CONTRIBUTING.rst | 7 ++-----
2 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml
index ea06d39..cc49c6a 100644
--- a/.github/.OwlBot.lock.yaml
+++ b/.github/.OwlBot.lock.yaml
@@ -1,3 +1,3 @@
docker:
image: gcr.io/repo-automation-bots/owlbot-python:latest
- digest: sha256:58c7342b0bccf85028100adaa3d856cb4a871c22ca9c01960d996e66c40548ce
+ digest: sha256:b6169fc6a5207b11800a7c002d0c5c2bc6d82697185ca12e666f44031468cfcd
diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst
index 6682ead..ea28b28 100644
--- a/CONTRIBUTING.rst
+++ b/CONTRIBUTING.rst
@@ -69,7 +69,6 @@ We use `nox `__ to instrument our tests.
- To test your changes, run unit tests with ``nox``::
- $ nox -s unit-2.7
$ nox -s unit-3.8
$ ...
@@ -144,7 +143,6 @@ Running System Tests
# Run all system tests
$ nox -s system-3.8
- $ nox -s system-2.7
# Run a single system test
$ nox -s system-3.8 -- -k
@@ -152,9 +150,8 @@ Running System Tests
.. note::
- System tests are only configured to run under Python 2.7 and
- Python 3.8. For expediency, we do not run them in older versions
- of Python 3.
+ System tests are only configured to run under Python 3.8.
+ For expediency, we do not run them in older versions of Python 3.
This alone will not run the tests. You'll need to change some local
auth settings and change some configuration in your project to
From b0dd42a37e2cb7a2fde59c8c673b02c92b3e1ecd Mon Sep 17 00:00:00 2001
From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com>
Date: Sun, 20 Jun 2021 01:00:25 +0000
Subject: [PATCH 3/8] chore: update precommit hook pre-commit/pre-commit-hooks
to v4 (#1083) (#93)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
[](https://renovatebot.com)
This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
| [pre-commit/pre-commit-hooks](https://togithub.com/pre-commit/pre-commit-hooks) | repository | major | `v3.4.0` -> `v4.0.1` |
---
### Release Notes
pre-commit/pre-commit-hooks
### [`v4.0.1`](https://togithub.com/pre-commit/pre-commit-hooks/releases/v4.0.1)
[Compare Source](https://togithub.com/pre-commit/pre-commit-hooks/compare/v4.0.0...v4.0.1)
##### Fixes
- `check-shebang-scripts-are-executable` fix entry point.
- [#602](https://togithub.com/pre-commit/pre-commit-hooks/issues/602) issue by [@Person-93](https://togithub.com/Person-93).
- [#603](https://togithub.com/pre-commit/pre-commit-hooks/issues/603) PR by [@scop](https://togithub.com/scop).
### [`v4.0.0`](https://togithub.com/pre-commit/pre-commit-hooks/releases/v4.0.0)
[Compare Source](https://togithub.com/pre-commit/pre-commit-hooks/compare/v3.4.0...v4.0.0)
##### Features
- `check-json`: report duplicate keys.
- [#558](https://togithub.com/pre-commit/pre-commit-hooks/issues/558) PR by [@AdityaKhursale](https://togithub.com/AdityaKhursale).
- [#554](https://togithub.com/pre-commit/pre-commit-hooks/issues/554) issue by [@adamchainz](https://togithub.com/adamchainz).
- `no-commit-to-branch`: add `main` to default blocked branches.
- [#565](https://togithub.com/pre-commit/pre-commit-hooks/issues/565) PR by [@ndevenish](https://togithub.com/ndevenish).
- `check-case-conflict`: check conflicts in directory names as well.
- [#575](https://togithub.com/pre-commit/pre-commit-hooks/issues/575) PR by [@slsyy](https://togithub.com/slsyy).
- [#70](https://togithub.com/pre-commit/pre-commit-hooks/issues/70) issue by [@andyjack](https://togithub.com/andyjack).
- `check-vcs-permalinks`: forbid other branch names.
- [#582](https://togithub.com/pre-commit/pre-commit-hooks/issues/582) PR by [@jack1142](https://togithub.com/jack1142).
- [#581](https://togithub.com/pre-commit/pre-commit-hooks/issues/581) issue by [@jack1142](https://togithub.com/jack1142).
- `check-shebang-scripts-are-executable`: new hook which ensures shebang'd scripts are executable.
- [#545](https://togithub.com/pre-commit/pre-commit-hooks/issues/545) PR by [@scop](https://togithub.com/scop).
##### Fixes
- `check-executables-have-shebangs`: Short circuit shebang lookup on windows.
- [#544](https://togithub.com/pre-commit/pre-commit-hooks/issues/544) PR by [@scop](https://togithub.com/scop).
- `requirements-txt-fixer`: Fix comments which have indentation
- [#549](https://togithub.com/pre-commit/pre-commit-hooks/issues/549) PR by [@greshilov](https://togithub.com/greshilov).
- [#548](https://togithub.com/pre-commit/pre-commit-hooks/issues/548) issue by [@greshilov](https://togithub.com/greshilov).
- `pretty-format-json`: write to stdout using UTF-8 encoding.
- [#571](https://togithub.com/pre-commit/pre-commit-hooks/issues/571) PR by [@jack1142](https://togithub.com/jack1142).
- [#570](https://togithub.com/pre-commit/pre-commit-hooks/issues/570) issue by [@jack1142](https://togithub.com/jack1142).
- Use more inclusive language.
- [#599](https://togithub.com/pre-commit/pre-commit-hooks/issues/599) PR by [@asottile](https://togithub.com/asottile).
##### Breaking changes
- Remove deprecated hooks: `flake8`, `pyflakes`, `autopep8-wrapper`.
- [#597](https://togithub.com/pre-commit/pre-commit-hooks/issues/597) PR by [@asottile](https://togithub.com/asottile).
---
### Configuration
📅 **Schedule**: At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.
♻️ **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found.
🔕 **Ignore**: Close this PR and you won't be reminded about this update again.
---
- [ ] If you want to rebase/retry this PR, check this box.
---
This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/synthtool).
Source-Link: https://github.com/googleapis/synthtool/commit/333fd90856f1454380514bc59fc0936cdaf1c202
Post-Processor: gcr.io/repo-automation-bots/owlbot-python:latest@sha256:b8c131c558606d3cea6e18f8e87befbd448c1482319b0db3c5d5388fa6ea72e3
---
.github/.OwlBot.lock.yaml | 2 +-
.pre-commit-config.yaml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml
index cc49c6a..9602d54 100644
--- a/.github/.OwlBot.lock.yaml
+++ b/.github/.OwlBot.lock.yaml
@@ -1,3 +1,3 @@
docker:
image: gcr.io/repo-automation-bots/owlbot-python:latest
- digest: sha256:b6169fc6a5207b11800a7c002d0c5c2bc6d82697185ca12e666f44031468cfcd
+ digest: sha256:b8c131c558606d3cea6e18f8e87befbd448c1482319b0db3c5d5388fa6ea72e3
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 4f00c7c..62eb5a7 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -16,7 +16,7 @@
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v3.4.0
+ rev: v4.0.1
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
From 811fe63d18c1f7d34daced240f4743ceecc8f7df Mon Sep 17 00:00:00 2001
From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com>
Date: Mon, 21 Jun 2021 15:54:14 -0600
Subject: [PATCH 4/8] chore: add kokoro 3.9 config templates (#1128) (#95)
fixes #907
Source-Link: https://github.com/googleapis/synthtool/commit/b0eb8a8b30b46a3c98d23c23107acb748c6601a1
Post-Processor: gcr.io/repo-automation-bots/owlbot-python:latest@sha256:df50e8d462f86d6bcb42f27ecad55bb12c404f1c65de9c6fe4c4d25120080bd6
Co-authored-by: Owl Bot
---
.github/.OwlBot.lock.yaml | 2 +-
.kokoro/samples/python3.9/common.cfg | 40 +++++++++++++++++++++
.kokoro/samples/python3.9/continuous.cfg | 6 ++++
.kokoro/samples/python3.9/periodic-head.cfg | 11 ++++++
.kokoro/samples/python3.9/periodic.cfg | 6 ++++
.kokoro/samples/python3.9/presubmit.cfg | 6 ++++
6 files changed, 70 insertions(+), 1 deletion(-)
create mode 100644 .kokoro/samples/python3.9/common.cfg
create mode 100644 .kokoro/samples/python3.9/continuous.cfg
create mode 100644 .kokoro/samples/python3.9/periodic-head.cfg
create mode 100644 .kokoro/samples/python3.9/periodic.cfg
create mode 100644 .kokoro/samples/python3.9/presubmit.cfg
diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml
index 9602d54..0954585 100644
--- a/.github/.OwlBot.lock.yaml
+++ b/.github/.OwlBot.lock.yaml
@@ -1,3 +1,3 @@
docker:
image: gcr.io/repo-automation-bots/owlbot-python:latest
- digest: sha256:b8c131c558606d3cea6e18f8e87befbd448c1482319b0db3c5d5388fa6ea72e3
+ digest: sha256:df50e8d462f86d6bcb42f27ecad55bb12c404f1c65de9c6fe4c4d25120080bd6
diff --git a/.kokoro/samples/python3.9/common.cfg b/.kokoro/samples/python3.9/common.cfg
new file mode 100644
index 0000000..232af73
--- /dev/null
+++ b/.kokoro/samples/python3.9/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.9"
+}
+
+# Declare build specific Cloud project.
+env_vars: {
+ key: "BUILD_SPECIFIC_GCLOUD_PROJECT"
+ value: "python-docs-samples-tests-py39"
+}
+
+env_vars: {
+ key: "TRAMPOLINE_BUILD_FILE"
+ value: "github/python-webrisk/.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-webrisk/.kokoro/trampoline.sh"
\ No newline at end of file
diff --git a/.kokoro/samples/python3.9/continuous.cfg b/.kokoro/samples/python3.9/continuous.cfg
new file mode 100644
index 0000000..a1c8d97
--- /dev/null
+++ b/.kokoro/samples/python3.9/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.9/periodic-head.cfg b/.kokoro/samples/python3.9/periodic-head.cfg
new file mode 100644
index 0000000..f9cfcd3
--- /dev/null
+++ b/.kokoro/samples/python3.9/periodic-head.cfg
@@ -0,0 +1,11 @@
+# Format: //devtools/kokoro/config/proto/build.proto
+
+env_vars: {
+ key: "INSTALL_LIBRARY_FROM_SOURCE"
+ value: "True"
+}
+
+env_vars: {
+ key: "TRAMPOLINE_BUILD_FILE"
+ value: "github/python-pubsub/.kokoro/test-samples-against-head.sh"
+}
diff --git a/.kokoro/samples/python3.9/periodic.cfg b/.kokoro/samples/python3.9/periodic.cfg
new file mode 100644
index 0000000..50fec96
--- /dev/null
+++ b/.kokoro/samples/python3.9/periodic.cfg
@@ -0,0 +1,6 @@
+# Format: //devtools/kokoro/config/proto/build.proto
+
+env_vars: {
+ key: "INSTALL_LIBRARY_FROM_SOURCE"
+ value: "False"
+}
\ No newline at end of file
diff --git a/.kokoro/samples/python3.9/presubmit.cfg b/.kokoro/samples/python3.9/presubmit.cfg
new file mode 100644
index 0000000..a1c8d97
--- /dev/null
+++ b/.kokoro/samples/python3.9/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
From b0f0fd3c7acd0bb4061956c3afd8e50d4d3c63a7 Mon Sep 17 00:00:00 2001
From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com>
Date: Wed, 23 Jun 2021 20:28:36 +0000
Subject: [PATCH 5/8] feat: add always_use_jwt_access (#96)
... chore: update gapic-generator-ruby to the latest commit chore: release gapic-generator-typescript 1.5.0
Committer: @miraleung
PiperOrigin-RevId: 380641501
Source-Link: https://github.com/googleapis/googleapis/commit/076f7e9f0b258bdb54338895d7251b202e8f0de3
Source-Link: https://github.com/googleapis/googleapis-gen/commit/27e4c88b4048e5f56508d4e1aa417d60a3380892
---
.coveragerc | 1 -
.../web_risk_service/transports/base.py | 40 +++----
.../web_risk_service/transports/grpc.py | 7 +-
.../transports/grpc_asyncio.py | 7 +-
.../transports/base.py | 40 +++----
.../transports/grpc.py | 7 +-
.../transports/grpc_asyncio.py | 7 +-
setup.py | 2 +-
testing/constraints-3.6.txt | 2 +-
.../gapic/webrisk_v1/test_web_risk_service.py | 104 +++---------------
.../test_web_risk_service_v1_beta1.py | 104 +++---------------
11 files changed, 76 insertions(+), 245 deletions(-)
diff --git a/.coveragerc b/.coveragerc
index 4430304..5b506b5 100644
--- a/.coveragerc
+++ b/.coveragerc
@@ -2,7 +2,6 @@
branch = True
[report]
-fail_under = 100
show_missing = True
omit =
google/cloud/webrisk/__init__.py
diff --git a/google/cloud/webrisk_v1/services/web_risk_service/transports/base.py b/google/cloud/webrisk_v1/services/web_risk_service/transports/base.py
index 63b636b..41be5a5 100644
--- a/google/cloud/webrisk_v1/services/web_risk_service/transports/base.py
+++ b/google/cloud/webrisk_v1/services/web_risk_service/transports/base.py
@@ -24,6 +24,7 @@
from google.api_core import gapic_v1 # type: ignore
from google.api_core import retry as retries # type: ignore
from google.auth import credentials as ga_credentials # type: ignore
+from google.oauth2 import service_account # type: ignore
from google.cloud.webrisk_v1.types import webrisk
@@ -43,8 +44,6 @@
except pkg_resources.DistributionNotFound: # pragma: NO COVER
_GOOGLE_AUTH_VERSION = None
-_API_CORE_VERSION = google.api_core.__version__
-
class WebRiskServiceTransport(abc.ABC):
"""Abstract transport class for WebRiskService."""
@@ -62,6 +61,7 @@ def __init__(
scopes: Optional[Sequence[str]] = None,
quota_project_id: Optional[str] = None,
client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
+ always_use_jwt_access: Optional[bool] = False,
**kwargs,
) -> None:
"""Instantiate the transport.
@@ -85,6 +85,8 @@ def __init__(
API requests. If ``None``, then default info will be used.
Generally, you only need to set this if you're developing
your own client library.
+ always_use_jwt_access (Optional[bool]): Whether self signed JWT should
+ be used for service account credentials.
"""
# Save the hostname. Default to port 443 (HTTPS) if none is specified.
if ":" not in host:
@@ -113,13 +115,20 @@ def __init__(
**scopes_kwargs, quota_project_id=quota_project_id
)
+ # If the credentials is service account credentials, then always try to use self signed JWT.
+ if (
+ always_use_jwt_access
+ and isinstance(credentials, service_account.Credentials)
+ and hasattr(service_account.Credentials, "with_always_use_jwt_access")
+ ):
+ credentials = credentials.with_always_use_jwt_access(True)
+
# Save the credentials.
self._credentials = credentials
- # TODO(busunkim): These two class methods are in the base transport
+ # TODO(busunkim): This method is in the base transport
# to avoid duplicating code across the transport classes. These functions
- # should be deleted once the minimum required versions of google-api-core
- # and google-auth are increased.
+ # should be deleted once the minimum required versions of google-auth is increased.
# TODO: Remove this function once google-auth >= 1.25.0 is required
@classmethod
@@ -140,27 +149,6 @@ def _get_scopes_kwargs(
return scopes_kwargs
- # TODO: Remove this function once google-api-core >= 1.26.0 is required
- @classmethod
- def _get_self_signed_jwt_kwargs(
- cls, host: str, scopes: Optional[Sequence[str]]
- ) -> Dict[str, Union[Optional[Sequence[str]], str]]:
- """Returns kwargs to pass to grpc_helpers.create_channel depending on the google-api-core version"""
-
- self_signed_jwt_kwargs: Dict[str, Union[Optional[Sequence[str]], str]] = {}
-
- if _API_CORE_VERSION and (
- packaging.version.parse(_API_CORE_VERSION)
- >= packaging.version.parse("1.26.0")
- ):
- self_signed_jwt_kwargs["default_scopes"] = cls.AUTH_SCOPES
- self_signed_jwt_kwargs["scopes"] = scopes
- self_signed_jwt_kwargs["default_host"] = cls.DEFAULT_HOST
- else:
- self_signed_jwt_kwargs["scopes"] = scopes or cls.AUTH_SCOPES
-
- return self_signed_jwt_kwargs
-
def _prep_wrapped_messages(self, client_info):
# Precompute the wrapped methods.
self._wrapped_methods = {
diff --git a/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc.py b/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc.py
index cec4459..f89a4f9 100644
--- a/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc.py
+++ b/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc.py
@@ -150,6 +150,7 @@ def __init__(
scopes=scopes,
quota_project_id=quota_project_id,
client_info=client_info,
+ always_use_jwt_access=True,
)
if not self._grpc_channel:
@@ -205,14 +206,14 @@ def create_channel(
and ``credentials_file`` are passed.
"""
- self_signed_jwt_kwargs = cls._get_self_signed_jwt_kwargs(host, scopes)
-
return grpc_helpers.create_channel(
host,
credentials=credentials,
credentials_file=credentials_file,
quota_project_id=quota_project_id,
- **self_signed_jwt_kwargs,
+ default_scopes=cls.AUTH_SCOPES,
+ scopes=scopes,
+ default_host=cls.DEFAULT_HOST,
**kwargs,
)
diff --git a/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc_asyncio.py b/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc_asyncio.py
index 871e15e..4537697 100644
--- a/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc_asyncio.py
+++ b/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc_asyncio.py
@@ -79,14 +79,14 @@ def create_channel(
aio.Channel: A gRPC AsyncIO channel object.
"""
- self_signed_jwt_kwargs = cls._get_self_signed_jwt_kwargs(host, scopes)
-
return grpc_helpers_async.create_channel(
host,
credentials=credentials,
credentials_file=credentials_file,
quota_project_id=quota_project_id,
- **self_signed_jwt_kwargs,
+ default_scopes=cls.AUTH_SCOPES,
+ scopes=scopes,
+ default_host=cls.DEFAULT_HOST,
**kwargs,
)
@@ -196,6 +196,7 @@ def __init__(
scopes=scopes,
quota_project_id=quota_project_id,
client_info=client_info,
+ always_use_jwt_access=True,
)
if not self._grpc_channel:
diff --git a/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/base.py b/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/base.py
index 7f94a0c..714a156 100644
--- a/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/base.py
+++ b/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/base.py
@@ -24,6 +24,7 @@
from google.api_core import gapic_v1 # type: ignore
from google.api_core import retry as retries # type: ignore
from google.auth import credentials as ga_credentials # type: ignore
+from google.oauth2 import service_account # type: ignore
from google.cloud.webrisk_v1beta1.types import webrisk
@@ -43,8 +44,6 @@
except pkg_resources.DistributionNotFound: # pragma: NO COVER
_GOOGLE_AUTH_VERSION = None
-_API_CORE_VERSION = google.api_core.__version__
-
class WebRiskServiceV1Beta1Transport(abc.ABC):
"""Abstract transport class for WebRiskServiceV1Beta1."""
@@ -62,6 +61,7 @@ def __init__(
scopes: Optional[Sequence[str]] = None,
quota_project_id: Optional[str] = None,
client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
+ always_use_jwt_access: Optional[bool] = False,
**kwargs,
) -> None:
"""Instantiate the transport.
@@ -85,6 +85,8 @@ def __init__(
API requests. If ``None``, then default info will be used.
Generally, you only need to set this if you're developing
your own client library.
+ always_use_jwt_access (Optional[bool]): Whether self signed JWT should
+ be used for service account credentials.
"""
# Save the hostname. Default to port 443 (HTTPS) if none is specified.
if ":" not in host:
@@ -113,13 +115,20 @@ def __init__(
**scopes_kwargs, quota_project_id=quota_project_id
)
+ # If the credentials is service account credentials, then always try to use self signed JWT.
+ if (
+ always_use_jwt_access
+ and isinstance(credentials, service_account.Credentials)
+ and hasattr(service_account.Credentials, "with_always_use_jwt_access")
+ ):
+ credentials = credentials.with_always_use_jwt_access(True)
+
# Save the credentials.
self._credentials = credentials
- # TODO(busunkim): These two class methods are in the base transport
+ # TODO(busunkim): This method is in the base transport
# to avoid duplicating code across the transport classes. These functions
- # should be deleted once the minimum required versions of google-api-core
- # and google-auth are increased.
+ # should be deleted once the minimum required versions of google-auth is increased.
# TODO: Remove this function once google-auth >= 1.25.0 is required
@classmethod
@@ -140,27 +149,6 @@ def _get_scopes_kwargs(
return scopes_kwargs
- # TODO: Remove this function once google-api-core >= 1.26.0 is required
- @classmethod
- def _get_self_signed_jwt_kwargs(
- cls, host: str, scopes: Optional[Sequence[str]]
- ) -> Dict[str, Union[Optional[Sequence[str]], str]]:
- """Returns kwargs to pass to grpc_helpers.create_channel depending on the google-api-core version"""
-
- self_signed_jwt_kwargs: Dict[str, Union[Optional[Sequence[str]], str]] = {}
-
- if _API_CORE_VERSION and (
- packaging.version.parse(_API_CORE_VERSION)
- >= packaging.version.parse("1.26.0")
- ):
- self_signed_jwt_kwargs["default_scopes"] = cls.AUTH_SCOPES
- self_signed_jwt_kwargs["scopes"] = scopes
- self_signed_jwt_kwargs["default_host"] = cls.DEFAULT_HOST
- else:
- self_signed_jwt_kwargs["scopes"] = scopes or cls.AUTH_SCOPES
-
- return self_signed_jwt_kwargs
-
def _prep_wrapped_messages(self, client_info):
# Precompute the wrapped methods.
self._wrapped_methods = {
diff --git a/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc.py b/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc.py
index 72fcce2..fd2627a 100644
--- a/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc.py
+++ b/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc.py
@@ -150,6 +150,7 @@ def __init__(
scopes=scopes,
quota_project_id=quota_project_id,
client_info=client_info,
+ always_use_jwt_access=True,
)
if not self._grpc_channel:
@@ -205,14 +206,14 @@ def create_channel(
and ``credentials_file`` are passed.
"""
- self_signed_jwt_kwargs = cls._get_self_signed_jwt_kwargs(host, scopes)
-
return grpc_helpers.create_channel(
host,
credentials=credentials,
credentials_file=credentials_file,
quota_project_id=quota_project_id,
- **self_signed_jwt_kwargs,
+ default_scopes=cls.AUTH_SCOPES,
+ scopes=scopes,
+ default_host=cls.DEFAULT_HOST,
**kwargs,
)
diff --git a/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc_asyncio.py b/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc_asyncio.py
index 2c86182..074bfec 100644
--- a/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc_asyncio.py
+++ b/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc_asyncio.py
@@ -79,14 +79,14 @@ def create_channel(
aio.Channel: A gRPC AsyncIO channel object.
"""
- self_signed_jwt_kwargs = cls._get_self_signed_jwt_kwargs(host, scopes)
-
return grpc_helpers_async.create_channel(
host,
credentials=credentials,
credentials_file=credentials_file,
quota_project_id=quota_project_id,
- **self_signed_jwt_kwargs,
+ default_scopes=cls.AUTH_SCOPES,
+ scopes=scopes,
+ default_host=cls.DEFAULT_HOST,
**kwargs,
)
@@ -196,6 +196,7 @@ def __init__(
scopes=scopes,
quota_project_id=quota_project_id,
client_info=client_info,
+ always_use_jwt_access=True,
)
if not self._grpc_channel:
diff --git a/setup.py b/setup.py
index 5718d0a..377beee 100644
--- a/setup.py
+++ b/setup.py
@@ -29,7 +29,7 @@
# 'Development Status :: 5 - Production/Stable'
release_status = "Development Status :: 5 - Production/Stable"
dependencies = [
- "google-api-core[grpc] >= 1.22.2, < 2.0.0dev",
+ "google-api-core[grpc] >= 1.26.0, <2.0.0dev",
"proto-plus >= 1.10.0",
"packaging >= 14.3",
]
diff --git a/testing/constraints-3.6.txt b/testing/constraints-3.6.txt
index eb64cb3..3ba086c 100644
--- a/testing/constraints-3.6.txt
+++ b/testing/constraints-3.6.txt
@@ -5,6 +5,6 @@
#
# e.g., if setup.py has "foo >= 1.14.0, < 2.0.0dev",
# Then this file should have foo==1.14.0
-google-api-core==1.22.2
+google-api-core==1.26.0
proto-plus==1.10.0
packaging==14.3
diff --git a/tests/unit/gapic/webrisk_v1/test_web_risk_service.py b/tests/unit/gapic/webrisk_v1/test_web_risk_service.py
index 94defad..87b4d6f 100644
--- a/tests/unit/gapic/webrisk_v1/test_web_risk_service.py
+++ b/tests/unit/gapic/webrisk_v1/test_web_risk_service.py
@@ -34,9 +34,6 @@
from google.cloud.webrisk_v1.services.web_risk_service import WebRiskServiceAsyncClient
from google.cloud.webrisk_v1.services.web_risk_service import WebRiskServiceClient
from google.cloud.webrisk_v1.services.web_risk_service import transports
-from google.cloud.webrisk_v1.services.web_risk_service.transports.base import (
- _API_CORE_VERSION,
-)
from google.cloud.webrisk_v1.services.web_risk_service.transports.base import (
_GOOGLE_AUTH_VERSION,
)
@@ -46,8 +43,9 @@
import google.auth
-# TODO(busunkim): Once google-api-core >= 1.26.0 is required:
-# - Delete all the api-core and auth "less than" test cases
+# TODO(busunkim): Once google-auth >= 1.25.0 is required transitively
+# through google-api-core:
+# - Delete the auth "less than" test cases
# - Delete these pytest markers (Make the "greater than or equal to" tests the default).
requires_google_auth_lt_1_25_0 = pytest.mark.skipif(
packaging.version.parse(_GOOGLE_AUTH_VERSION) >= packaging.version.parse("1.25.0"),
@@ -58,16 +56,6 @@
reason="This test requires google-auth >= 1.25.0",
)
-requires_api_core_lt_1_26_0 = pytest.mark.skipif(
- packaging.version.parse(_API_CORE_VERSION) >= packaging.version.parse("1.26.0"),
- reason="This test requires google-api-core < 1.26.0",
-)
-
-requires_api_core_gte_1_26_0 = pytest.mark.skipif(
- packaging.version.parse(_API_CORE_VERSION) < packaging.version.parse("1.26.0"),
- reason="This test requires google-api-core >= 1.26.0",
-)
-
def client_cert_source_callback():
return b"cert bytes", b"key bytes"
@@ -130,6 +118,18 @@ def test_web_risk_service_client_from_service_account_info(client_class):
assert client.transport._host == "webrisk.googleapis.com:443"
+@pytest.mark.parametrize(
+ "client_class", [WebRiskServiceClient, WebRiskServiceAsyncClient,]
+)
+def test_web_risk_service_client_service_account_always_use_jwt(client_class):
+ with mock.patch.object(
+ service_account.Credentials, "with_always_use_jwt_access", create=True
+ ) as use_jwt:
+ creds = service_account.Credentials(None, None, None)
+ client = client_class(credentials=creds)
+ use_jwt.assert_called_with(True)
+
+
@pytest.mark.parametrize(
"client_class", [WebRiskServiceClient, WebRiskServiceAsyncClient,]
)
@@ -1440,7 +1440,6 @@ def test_web_risk_service_transport_auth_adc_old_google_auth(transport_class):
(transports.WebRiskServiceGrpcAsyncIOTransport, grpc_helpers_async),
],
)
-@requires_api_core_gte_1_26_0
def test_web_risk_service_transport_create_channel(transport_class, grpc_helpers):
# If credentials and host are not provided, the transport class should use
# ADC credentials.
@@ -1469,79 +1468,6 @@ def test_web_risk_service_transport_create_channel(transport_class, grpc_helpers
)
-@pytest.mark.parametrize(
- "transport_class,grpc_helpers",
- [
- (transports.WebRiskServiceGrpcTransport, grpc_helpers),
- (transports.WebRiskServiceGrpcAsyncIOTransport, grpc_helpers_async),
- ],
-)
-@requires_api_core_lt_1_26_0
-def test_web_risk_service_transport_create_channel_old_api_core(
- transport_class, grpc_helpers
-):
- # If credentials and host are not provided, the transport class should use
- # ADC credentials.
- with mock.patch.object(
- google.auth, "default", autospec=True
- ) as adc, mock.patch.object(
- grpc_helpers, "create_channel", autospec=True
- ) as create_channel:
- creds = ga_credentials.AnonymousCredentials()
- adc.return_value = (creds, None)
- transport_class(quota_project_id="octopus")
-
- create_channel.assert_called_with(
- "webrisk.googleapis.com:443",
- credentials=creds,
- credentials_file=None,
- quota_project_id="octopus",
- scopes=("https://www.googleapis.com/auth/cloud-platform",),
- ssl_credentials=None,
- options=[
- ("grpc.max_send_message_length", -1),
- ("grpc.max_receive_message_length", -1),
- ],
- )
-
-
-@pytest.mark.parametrize(
- "transport_class,grpc_helpers",
- [
- (transports.WebRiskServiceGrpcTransport, grpc_helpers),
- (transports.WebRiskServiceGrpcAsyncIOTransport, grpc_helpers_async),
- ],
-)
-@requires_api_core_lt_1_26_0
-def test_web_risk_service_transport_create_channel_user_scopes(
- transport_class, grpc_helpers
-):
- # If credentials and host are not provided, the transport class should use
- # ADC credentials.
- with mock.patch.object(
- google.auth, "default", autospec=True
- ) as adc, mock.patch.object(
- grpc_helpers, "create_channel", autospec=True
- ) as create_channel:
- creds = ga_credentials.AnonymousCredentials()
- adc.return_value = (creds, None)
-
- transport_class(quota_project_id="octopus", scopes=["1", "2"])
-
- create_channel.assert_called_with(
- "webrisk.googleapis.com:443",
- credentials=creds,
- credentials_file=None,
- quota_project_id="octopus",
- scopes=["1", "2"],
- ssl_credentials=None,
- options=[
- ("grpc.max_send_message_length", -1),
- ("grpc.max_receive_message_length", -1),
- ],
- )
-
-
@pytest.mark.parametrize(
"transport_class",
[
diff --git a/tests/unit/gapic/webrisk_v1beta1/test_web_risk_service_v1_beta1.py b/tests/unit/gapic/webrisk_v1beta1/test_web_risk_service_v1_beta1.py
index 33cf63b..32a390b 100644
--- a/tests/unit/gapic/webrisk_v1beta1/test_web_risk_service_v1_beta1.py
+++ b/tests/unit/gapic/webrisk_v1beta1/test_web_risk_service_v1_beta1.py
@@ -38,9 +38,6 @@
WebRiskServiceV1Beta1Client,
)
from google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1 import transports
-from google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1.transports.base import (
- _API_CORE_VERSION,
-)
from google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1.transports.base import (
_GOOGLE_AUTH_VERSION,
)
@@ -50,8 +47,9 @@
import google.auth
-# TODO(busunkim): Once google-api-core >= 1.26.0 is required:
-# - Delete all the api-core and auth "less than" test cases
+# TODO(busunkim): Once google-auth >= 1.25.0 is required transitively
+# through google-api-core:
+# - Delete the auth "less than" test cases
# - Delete these pytest markers (Make the "greater than or equal to" tests the default).
requires_google_auth_lt_1_25_0 = pytest.mark.skipif(
packaging.version.parse(_GOOGLE_AUTH_VERSION) >= packaging.version.parse("1.25.0"),
@@ -62,16 +60,6 @@
reason="This test requires google-auth >= 1.25.0",
)
-requires_api_core_lt_1_26_0 = pytest.mark.skipif(
- packaging.version.parse(_API_CORE_VERSION) >= packaging.version.parse("1.26.0"),
- reason="This test requires google-api-core < 1.26.0",
-)
-
-requires_api_core_gte_1_26_0 = pytest.mark.skipif(
- packaging.version.parse(_API_CORE_VERSION) < packaging.version.parse("1.26.0"),
- reason="This test requires google-api-core >= 1.26.0",
-)
-
def client_cert_source_callback():
return b"cert bytes", b"key bytes"
@@ -135,6 +123,18 @@ def test_web_risk_service_v1_beta1_client_from_service_account_info(client_class
assert client.transport._host == "webrisk.googleapis.com:443"
+@pytest.mark.parametrize(
+ "client_class", [WebRiskServiceV1Beta1Client, WebRiskServiceV1Beta1AsyncClient,]
+)
+def test_web_risk_service_v1_beta1_client_service_account_always_use_jwt(client_class):
+ with mock.patch.object(
+ service_account.Credentials, "with_always_use_jwt_access", create=True
+ ) as use_jwt:
+ creds = service_account.Credentials(None, None, None)
+ client = client_class(credentials=creds)
+ use_jwt.assert_called_with(True)
+
+
@pytest.mark.parametrize(
"client_class", [WebRiskServiceV1Beta1Client, WebRiskServiceV1Beta1AsyncClient,]
)
@@ -1258,7 +1258,6 @@ def test_web_risk_service_v1_beta1_transport_auth_adc_old_google_auth(transport_
(transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport, grpc_helpers_async),
],
)
-@requires_api_core_gte_1_26_0
def test_web_risk_service_v1_beta1_transport_create_channel(
transport_class, grpc_helpers
):
@@ -1289,79 +1288,6 @@ def test_web_risk_service_v1_beta1_transport_create_channel(
)
-@pytest.mark.parametrize(
- "transport_class,grpc_helpers",
- [
- (transports.WebRiskServiceV1Beta1GrpcTransport, grpc_helpers),
- (transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport, grpc_helpers_async),
- ],
-)
-@requires_api_core_lt_1_26_0
-def test_web_risk_service_v1_beta1_transport_create_channel_old_api_core(
- transport_class, grpc_helpers
-):
- # If credentials and host are not provided, the transport class should use
- # ADC credentials.
- with mock.patch.object(
- google.auth, "default", autospec=True
- ) as adc, mock.patch.object(
- grpc_helpers, "create_channel", autospec=True
- ) as create_channel:
- creds = ga_credentials.AnonymousCredentials()
- adc.return_value = (creds, None)
- transport_class(quota_project_id="octopus")
-
- create_channel.assert_called_with(
- "webrisk.googleapis.com:443",
- credentials=creds,
- credentials_file=None,
- quota_project_id="octopus",
- scopes=("https://www.googleapis.com/auth/cloud-platform",),
- ssl_credentials=None,
- options=[
- ("grpc.max_send_message_length", -1),
- ("grpc.max_receive_message_length", -1),
- ],
- )
-
-
-@pytest.mark.parametrize(
- "transport_class,grpc_helpers",
- [
- (transports.WebRiskServiceV1Beta1GrpcTransport, grpc_helpers),
- (transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport, grpc_helpers_async),
- ],
-)
-@requires_api_core_lt_1_26_0
-def test_web_risk_service_v1_beta1_transport_create_channel_user_scopes(
- transport_class, grpc_helpers
-):
- # If credentials and host are not provided, the transport class should use
- # ADC credentials.
- with mock.patch.object(
- google.auth, "default", autospec=True
- ) as adc, mock.patch.object(
- grpc_helpers, "create_channel", autospec=True
- ) as create_channel:
- creds = ga_credentials.AnonymousCredentials()
- adc.return_value = (creds, None)
-
- transport_class(quota_project_id="octopus", scopes=["1", "2"])
-
- create_channel.assert_called_with(
- "webrisk.googleapis.com:443",
- credentials=creds,
- credentials_file=None,
- quota_project_id="octopus",
- scopes=["1", "2"],
- ssl_credentials=None,
- options=[
- ("grpc.max_send_message_length", -1),
- ("grpc.max_receive_message_length", -1),
- ],
- )
-
-
@pytest.mark.parametrize(
"transport_class",
[
From b5e1d0d3b26d752c6fc084ff126c5e56b2e7e934 Mon Sep 17 00:00:00 2001
From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com>
Date: Sat, 26 Jun 2021 12:24:13 +0000
Subject: [PATCH 6/8] chore(python): simplify nox steps in CONTRIBUTING.rst
(#98)
Source-Link: https://github.com/googleapis/synthtool/commit/26558bae8976a985d73c2d98c31d8612273f907d
Post-Processor: gcr.io/repo-automation-bots/owlbot-python:latest@sha256:99d90d097e4a4710cc8658ee0b5b963f4426d0e424819787c3ac1405c9a26719
---
.github/.OwlBot.lock.yaml | 2 +-
CONTRIBUTING.rst | 14 ++++++--------
2 files changed, 7 insertions(+), 9 deletions(-)
diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml
index 0954585..e2b39f9 100644
--- a/.github/.OwlBot.lock.yaml
+++ b/.github/.OwlBot.lock.yaml
@@ -1,3 +1,3 @@
docker:
image: gcr.io/repo-automation-bots/owlbot-python:latest
- digest: sha256:df50e8d462f86d6bcb42f27ecad55bb12c404f1c65de9c6fe4c4d25120080bd6
+ digest: sha256:99d90d097e4a4710cc8658ee0b5b963f4426d0e424819787c3ac1405c9a26719
diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst
index ea28b28..0305fa3 100644
--- a/CONTRIBUTING.rst
+++ b/CONTRIBUTING.rst
@@ -68,14 +68,12 @@ Using ``nox``
We use `nox `__ to instrument our tests.
- To test your changes, run unit tests with ``nox``::
+ $ nox -s unit
- $ nox -s unit-3.8
- $ ...
+- To run a single unit test::
-- Args to pytest can be passed through the nox command separated by a `--`. For
- example, to run a single test::
+ $ nox -s unit-3.9 -- -k
- $ nox -s unit-3.8 -- -k
.. note::
@@ -142,7 +140,7 @@ Running System Tests
- To run system tests, you can execute::
# Run all system tests
- $ nox -s system-3.8
+ $ nox -s system
# Run a single system test
$ nox -s system-3.8 -- -k
@@ -215,8 +213,8 @@ Supported versions can be found in our ``noxfile.py`` `config`_.
.. _config: https://github.com/googleapis/python-webrisk/blob/master/noxfile.py
-We also explicitly decided to support Python 3 beginning with version
-3.6. Reasons for this include:
+We also explicitly decided to support Python 3 beginning with version 3.6.
+Reasons for this include:
- Encouraging use of newest versions of Python 3
- Taking the lead of `prominent`_ open-source `projects`_
From 8f2d77ec058ba0a9943f43edcf077835a6dbd47e Mon Sep 17 00:00:00 2001
From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com>
Date: Thu, 1 Jul 2021 02:26:12 +0000
Subject: [PATCH 7/8] fix: disable always_use_jwt_access (#100)
Committer: @busunkim96
PiperOrigin-RevId: 382142900
Source-Link: https://github.com/googleapis/googleapis/commit/513440fda515f3c799c22a30e3906dcda325004e
Source-Link: https://github.com/googleapis/googleapis-gen/commit/7b1e2c31233f79a704ec21ca410bf661d6bc68d0
---
owl-bot-staging/v1/.coveragerc | 17 +
owl-bot-staging/v1/MANIFEST.in | 2 +
owl-bot-staging/v1/README.rst | 49 +
owl-bot-staging/v1/docs/conf.py | 376 ++++
owl-bot-staging/v1/docs/index.rst | 7 +
.../v1/docs/webrisk_v1/services.rst | 6 +
owl-bot-staging/v1/docs/webrisk_v1/types.rst | 7 +
.../v1/docs/webrisk_v1/web_risk_service.rst | 6 +
.../v1/google/cloud/webrisk/__init__.py | 53 +
.../v1/google/cloud/webrisk/py.typed | 2 +
.../v1/google/cloud/webrisk_v1/__init__.py | 54 +
.../cloud/webrisk_v1/gapic_metadata.json | 63 +
.../v1/google/cloud/webrisk_v1/py.typed | 2 +
.../cloud/webrisk_v1/services/__init__.py | 15 +
.../services/web_risk_service/__init__.py | 22 +
.../services/web_risk_service/async_client.py | 541 ++++++
.../services/web_risk_service/client.py | 698 +++++++
.../web_risk_service/transports/__init__.py | 33 +
.../web_risk_service/transports/base.py | 231 +++
.../web_risk_service/transports/grpc.py | 355 ++++
.../transports/grpc_asyncio.py | 359 ++++
.../google/cloud/webrisk_v1/types/__init__.py | 50 +
.../google/cloud/webrisk_v1/types/webrisk.py | 529 ++++++
owl-bot-staging/v1/mypy.ini | 3 +
owl-bot-staging/v1/noxfile.py | 132 ++
.../v1/scripts/fixup_webrisk_v1_keywords.py | 179 ++
owl-bot-staging/v1/setup.py | 53 +
owl-bot-staging/v1/tests/__init__.py | 16 +
owl-bot-staging/v1/tests/unit/__init__.py | 16 +
.../v1/tests/unit/gapic/__init__.py | 16 +
.../tests/unit/gapic/webrisk_v1/__init__.py | 16 +
.../gapic/webrisk_v1/test_web_risk_service.py | 1675 +++++++++++++++++
owl-bot-staging/v1beta1/.coveragerc | 17 +
owl-bot-staging/v1beta1/MANIFEST.in | 2 +
owl-bot-staging/v1beta1/README.rst | 49 +
owl-bot-staging/v1beta1/docs/conf.py | 376 ++++
owl-bot-staging/v1beta1/docs/index.rst | 7 +
.../v1beta1/docs/webrisk_v1beta1/services.rst | 6 +
.../v1beta1/docs/webrisk_v1beta1/types.rst | 7 +
.../web_risk_service_v1_beta1.rst | 6 +
.../v1beta1/google/cloud/webrisk/__init__.py | 49 +
.../v1beta1/google/cloud/webrisk/py.typed | 2 +
.../google/cloud/webrisk_v1beta1/__init__.py | 50 +
.../cloud/webrisk_v1beta1/gapic_metadata.json | 53 +
.../google/cloud/webrisk_v1beta1/py.typed | 2 +
.../webrisk_v1beta1/services/__init__.py | 15 +
.../web_risk_service_v1_beta1/__init__.py | 22 +
.../web_risk_service_v1_beta1/async_client.py | 426 +++++
.../web_risk_service_v1_beta1/client.py | 583 ++++++
.../transports/__init__.py | 33 +
.../transports/base.py | 217 +++
.../transports/grpc.py | 311 +++
.../transports/grpc_asyncio.py | 315 ++++
.../cloud/webrisk_v1beta1/types/__init__.py | 46 +
.../cloud/webrisk_v1beta1/types/webrisk.py | 478 +++++
owl-bot-staging/v1beta1/mypy.ini | 3 +
owl-bot-staging/v1beta1/noxfile.py | 132 ++
.../scripts/fixup_webrisk_v1beta1_keywords.py | 178 ++
owl-bot-staging/v1beta1/setup.py | 53 +
owl-bot-staging/v1beta1/tests/__init__.py | 16 +
.../v1beta1/tests/unit/__init__.py | 16 +
.../v1beta1/tests/unit/gapic/__init__.py | 16 +
.../unit/gapic/webrisk_v1beta1/__init__.py | 16 +
.../test_web_risk_service_v1_beta1.py | 1437 ++++++++++++++
64 files changed, 10522 insertions(+)
create mode 100644 owl-bot-staging/v1/.coveragerc
create mode 100644 owl-bot-staging/v1/MANIFEST.in
create mode 100644 owl-bot-staging/v1/README.rst
create mode 100644 owl-bot-staging/v1/docs/conf.py
create mode 100644 owl-bot-staging/v1/docs/index.rst
create mode 100644 owl-bot-staging/v1/docs/webrisk_v1/services.rst
create mode 100644 owl-bot-staging/v1/docs/webrisk_v1/types.rst
create mode 100644 owl-bot-staging/v1/docs/webrisk_v1/web_risk_service.rst
create mode 100644 owl-bot-staging/v1/google/cloud/webrisk/__init__.py
create mode 100644 owl-bot-staging/v1/google/cloud/webrisk/py.typed
create mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/__init__.py
create mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/gapic_metadata.json
create mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/py.typed
create mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/services/__init__.py
create mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/__init__.py
create mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/async_client.py
create mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/client.py
create mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/__init__.py
create mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/base.py
create mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc.py
create mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc_asyncio.py
create mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/types/__init__.py
create mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/types/webrisk.py
create mode 100644 owl-bot-staging/v1/mypy.ini
create mode 100644 owl-bot-staging/v1/noxfile.py
create mode 100644 owl-bot-staging/v1/scripts/fixup_webrisk_v1_keywords.py
create mode 100644 owl-bot-staging/v1/setup.py
create mode 100644 owl-bot-staging/v1/tests/__init__.py
create mode 100644 owl-bot-staging/v1/tests/unit/__init__.py
create mode 100644 owl-bot-staging/v1/tests/unit/gapic/__init__.py
create mode 100644 owl-bot-staging/v1/tests/unit/gapic/webrisk_v1/__init__.py
create mode 100644 owl-bot-staging/v1/tests/unit/gapic/webrisk_v1/test_web_risk_service.py
create mode 100644 owl-bot-staging/v1beta1/.coveragerc
create mode 100644 owl-bot-staging/v1beta1/MANIFEST.in
create mode 100644 owl-bot-staging/v1beta1/README.rst
create mode 100644 owl-bot-staging/v1beta1/docs/conf.py
create mode 100644 owl-bot-staging/v1beta1/docs/index.rst
create mode 100644 owl-bot-staging/v1beta1/docs/webrisk_v1beta1/services.rst
create mode 100644 owl-bot-staging/v1beta1/docs/webrisk_v1beta1/types.rst
create mode 100644 owl-bot-staging/v1beta1/docs/webrisk_v1beta1/web_risk_service_v1_beta1.rst
create mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk/__init__.py
create mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk/py.typed
create mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/__init__.py
create mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/gapic_metadata.json
create mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/py.typed
create mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/__init__.py
create mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/__init__.py
create mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/async_client.py
create mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/client.py
create mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/__init__.py
create mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/base.py
create mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc.py
create mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc_asyncio.py
create mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/types/__init__.py
create mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/types/webrisk.py
create mode 100644 owl-bot-staging/v1beta1/mypy.ini
create mode 100644 owl-bot-staging/v1beta1/noxfile.py
create mode 100644 owl-bot-staging/v1beta1/scripts/fixup_webrisk_v1beta1_keywords.py
create mode 100644 owl-bot-staging/v1beta1/setup.py
create mode 100644 owl-bot-staging/v1beta1/tests/__init__.py
create mode 100644 owl-bot-staging/v1beta1/tests/unit/__init__.py
create mode 100644 owl-bot-staging/v1beta1/tests/unit/gapic/__init__.py
create mode 100644 owl-bot-staging/v1beta1/tests/unit/gapic/webrisk_v1beta1/__init__.py
create mode 100644 owl-bot-staging/v1beta1/tests/unit/gapic/webrisk_v1beta1/test_web_risk_service_v1_beta1.py
diff --git a/owl-bot-staging/v1/.coveragerc b/owl-bot-staging/v1/.coveragerc
new file mode 100644
index 0000000..5b506b5
--- /dev/null
+++ b/owl-bot-staging/v1/.coveragerc
@@ -0,0 +1,17 @@
+[run]
+branch = True
+
+[report]
+show_missing = True
+omit =
+ google/cloud/webrisk/__init__.py
+exclude_lines =
+ # Re-enable the standard pragma
+ pragma: NO COVER
+ # Ignore debug-only repr
+ def __repr__
+ # Ignore pkg_resources exceptions.
+ # This is added at the module level as a safeguard for if someone
+ # generates the code and tries to run it without pip installing. This
+ # makes it virtually impossible to test properly.
+ except pkg_resources.DistributionNotFound
diff --git a/owl-bot-staging/v1/MANIFEST.in b/owl-bot-staging/v1/MANIFEST.in
new file mode 100644
index 0000000..15cbc35
--- /dev/null
+++ b/owl-bot-staging/v1/MANIFEST.in
@@ -0,0 +1,2 @@
+recursive-include google/cloud/webrisk *.py
+recursive-include google/cloud/webrisk_v1 *.py
diff --git a/owl-bot-staging/v1/README.rst b/owl-bot-staging/v1/README.rst
new file mode 100644
index 0000000..47325bb
--- /dev/null
+++ b/owl-bot-staging/v1/README.rst
@@ -0,0 +1,49 @@
+Python Client for Google Cloud Webrisk API
+=================================================
+
+Quick Start
+-----------
+
+In order to use this library, you first need to go through the following steps:
+
+1. `Select or create a Cloud Platform project.`_
+2. `Enable billing for your project.`_
+3. Enable the Google Cloud Webrisk API.
+4. `Setup Authentication.`_
+
+.. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project
+.. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project
+.. _Setup Authentication.: https://googleapis.dev/python/google-api-core/latest/auth.html
+
+Installation
+~~~~~~~~~~~~
+
+Install this library in a `virtualenv`_ using pip. `virtualenv`_ is a tool to
+create isolated Python environments. The basic problem it addresses is one of
+dependencies and versions, and indirectly permissions.
+
+With `virtualenv`_, it's possible to install this library without needing system
+install permissions, and without clashing with the installed system
+dependencies.
+
+.. _`virtualenv`: https://virtualenv.pypa.io/en/latest/
+
+
+Mac/Linux
+^^^^^^^^^
+
+.. code-block:: console
+
+ python3 -m venv
+ source /bin/activate
+ /bin/pip install /path/to/library
+
+
+Windows
+^^^^^^^
+
+.. code-block:: console
+
+ python3 -m venv
+ \Scripts\activate
+ \Scripts\pip.exe install \path\to\library
diff --git a/owl-bot-staging/v1/docs/conf.py b/owl-bot-staging/v1/docs/conf.py
new file mode 100644
index 0000000..ed09c72
--- /dev/null
+++ b/owl-bot-staging/v1/docs/conf.py
@@ -0,0 +1,376 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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.
+#
+#
+# google-cloud-webrisk documentation build configuration file
+#
+# This file is execfile()d with the current directory set to its
+# containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys
+import os
+import shlex
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+sys.path.insert(0, os.path.abspath(".."))
+
+__version__ = "0.1.0"
+
+# -- General configuration ------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+needs_sphinx = "1.6.3"
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+ "sphinx.ext.autodoc",
+ "sphinx.ext.autosummary",
+ "sphinx.ext.intersphinx",
+ "sphinx.ext.coverage",
+ "sphinx.ext.napoleon",
+ "sphinx.ext.todo",
+ "sphinx.ext.viewcode",
+]
+
+# autodoc/autosummary flags
+autoclass_content = "both"
+autodoc_default_flags = ["members"]
+autosummary_generate = True
+
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ["_templates"]
+
+# Allow markdown includes (so releases.md can include CHANGLEOG.md)
+# http://www.sphinx-doc.org/en/master/markdown.html
+source_parsers = {".md": "recommonmark.parser.CommonMarkParser"}
+
+# The suffix(es) of source filenames.
+# You can specify multiple suffix as a list of string:
+source_suffix = [".rst", ".md"]
+
+# The encoding of source files.
+# source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = "index"
+
+# General information about the project.
+project = u"google-cloud-webrisk"
+copyright = u"2020, Google, LLC"
+author = u"Google APIs" # TODO: autogenerate this bit
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The full version, including alpha/beta/rc tags.
+release = __version__
+# The short X.Y version.
+version = ".".join(release.split(".")[0:2])
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#
+# This is also used if you do content translation via gettext catalogs.
+# Usually you set "language" from the command line for these cases.
+language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+# today = ''
+# Else, today_fmt is used as the format for a strftime call.
+# today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = ["_build"]
+
+# The reST default role (used for this markup: `text`) to use for all
+# documents.
+# default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+# add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+# add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+# show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = "sphinx"
+
+# A list of ignored prefixes for module index sorting.
+# modindex_common_prefix = []
+
+# If true, keep warnings as "system message" paragraphs in the built documents.
+# keep_warnings = False
+
+# If true, `todo` and `todoList` produce output, else they produce nothing.
+todo_include_todos = True
+
+
+# -- Options for HTML output ----------------------------------------------
+
+# The theme to use for HTML and HTML Help pages. See the documentation for
+# a list of builtin themes.
+html_theme = "alabaster"
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further. For a list of options available for each theme, see the
+# documentation.
+html_theme_options = {
+ "description": "Google Cloud Client Libraries for Python",
+ "github_user": "googleapis",
+ "github_repo": "google-cloud-python",
+ "github_banner": True,
+ "font_family": "'Roboto', Georgia, sans",
+ "head_font_family": "'Roboto', Georgia, serif",
+ "code_font_family": "'Roboto Mono', 'Consolas', monospace",
+}
+
+# Add any paths that contain custom themes here, relative to this directory.
+# html_theme_path = []
+
+# The name for this set of Sphinx documents. If None, it defaults to
+# " v documentation".
+# html_title = None
+
+# A shorter title for the navigation bar. Default is the same as html_title.
+# html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+# html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+# html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ["_static"]
+
+# Add any extra paths that contain custom files (such as robots.txt or
+# .htaccess) here, relative to this directory. These files are copied
+# directly to the root of the documentation.
+# html_extra_path = []
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+# html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+# html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+# html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+# html_additional_pages = {}
+
+# If false, no module index is generated.
+# html_domain_indices = True
+
+# If false, no index is generated.
+# html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+# html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+# html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
+# html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
+# html_show_copyright = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a tag referring to it. The value of this option must be the
+# base URL from which the finished HTML is served.
+# html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+# html_file_suffix = None
+
+# Language to be used for generating the HTML full-text search index.
+# Sphinx supports the following languages:
+# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
+# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
+# html_search_language = 'en'
+
+# A dictionary with options for the search language support, empty by default.
+# Now only 'ja' uses this config value
+# html_search_options = {'type': 'default'}
+
+# The name of a javascript file (relative to the configuration directory) that
+# implements a search results scorer. If empty, the default will be used.
+# html_search_scorer = 'scorer.js'
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = "google-cloud-webrisk-doc"
+
+# -- Options for warnings ------------------------------------------------------
+
+
+suppress_warnings = [
+ # Temporarily suppress this to avoid "more than one target found for
+ # cross-reference" warning, which are intractable for us to avoid while in
+ # a mono-repo.
+ # See https://github.com/sphinx-doc/sphinx/blob
+ # /2a65ffeef5c107c19084fabdd706cdff3f52d93c/sphinx/domains/python.py#L843
+ "ref.python"
+]
+
+# -- Options for LaTeX output ---------------------------------------------
+
+latex_elements = {
+ # The paper size ('letterpaper' or 'a4paper').
+ # 'papersize': 'letterpaper',
+ # The font size ('10pt', '11pt' or '12pt').
+ # 'pointsize': '10pt',
+ # Additional stuff for the LaTeX preamble.
+ # 'preamble': '',
+ # Latex figure (float) alignment
+ # 'figure_align': 'htbp',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title,
+# author, documentclass [howto, manual, or own class]).
+latex_documents = [
+ (
+ master_doc,
+ "google-cloud-webrisk.tex",
+ u"google-cloud-webrisk Documentation",
+ author,
+ "manual",
+ )
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+# latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+# latex_use_parts = False
+
+# If true, show page references after internal links.
+# latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+# latex_show_urls = False
+
+# Documents to append as an appendix to all manuals.
+# latex_appendices = []
+
+# If false, no module index is generated.
+# latex_domain_indices = True
+
+
+# -- Options for manual page output ---------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+ (
+ master_doc,
+ "google-cloud-webrisk",
+ u"Google Cloud Webrisk Documentation",
+ [author],
+ 1,
+ )
+]
+
+# If true, show URL addresses after external links.
+# man_show_urls = False
+
+
+# -- Options for Texinfo output -------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+# dir menu entry, description, category)
+texinfo_documents = [
+ (
+ master_doc,
+ "google-cloud-webrisk",
+ u"google-cloud-webrisk Documentation",
+ author,
+ "google-cloud-webrisk",
+ "GAPIC library for Google Cloud Webrisk API",
+ "APIs",
+ )
+]
+
+# Documents to append as an appendix to all manuals.
+# texinfo_appendices = []
+
+# If false, no module index is generated.
+# texinfo_domain_indices = True
+
+# How to display URL addresses: 'footnote', 'no', or 'inline'.
+# texinfo_show_urls = 'footnote'
+
+# If true, do not generate a @detailmenu in the "Top" node's menu.
+# texinfo_no_detailmenu = False
+
+
+# Example configuration for intersphinx: refer to the Python standard library.
+intersphinx_mapping = {
+ "python": ("http://python.readthedocs.org/en/latest/", None),
+ "gax": ("https://gax-python.readthedocs.org/en/latest/", None),
+ "google-auth": ("https://google-auth.readthedocs.io/en/stable", None),
+ "google-gax": ("https://gax-python.readthedocs.io/en/latest/", None),
+ "google.api_core": ("https://googleapis.dev/python/google-api-core/latest/", None),
+ "grpc": ("https://grpc.io/grpc/python/", None),
+ "requests": ("http://requests.kennethreitz.org/en/stable/", None),
+ "proto": ("https://proto-plus-python.readthedocs.io/en/stable", None),
+ "protobuf": ("https://googleapis.dev/python/protobuf/latest/", None),
+}
+
+
+# Napoleon settings
+napoleon_google_docstring = True
+napoleon_numpy_docstring = True
+napoleon_include_private_with_doc = False
+napoleon_include_special_with_doc = True
+napoleon_use_admonition_for_examples = False
+napoleon_use_admonition_for_notes = False
+napoleon_use_admonition_for_references = False
+napoleon_use_ivar = False
+napoleon_use_param = True
+napoleon_use_rtype = True
diff --git a/owl-bot-staging/v1/docs/index.rst b/owl-bot-staging/v1/docs/index.rst
new file mode 100644
index 0000000..6d510e6
--- /dev/null
+++ b/owl-bot-staging/v1/docs/index.rst
@@ -0,0 +1,7 @@
+API Reference
+-------------
+.. toctree::
+ :maxdepth: 2
+
+ webrisk_v1/services
+ webrisk_v1/types
diff --git a/owl-bot-staging/v1/docs/webrisk_v1/services.rst b/owl-bot-staging/v1/docs/webrisk_v1/services.rst
new file mode 100644
index 0000000..8b02d33
--- /dev/null
+++ b/owl-bot-staging/v1/docs/webrisk_v1/services.rst
@@ -0,0 +1,6 @@
+Services for Google Cloud Webrisk v1 API
+========================================
+.. toctree::
+ :maxdepth: 2
+
+ web_risk_service
diff --git a/owl-bot-staging/v1/docs/webrisk_v1/types.rst b/owl-bot-staging/v1/docs/webrisk_v1/types.rst
new file mode 100644
index 0000000..8d742a7
--- /dev/null
+++ b/owl-bot-staging/v1/docs/webrisk_v1/types.rst
@@ -0,0 +1,7 @@
+Types for Google Cloud Webrisk v1 API
+=====================================
+
+.. automodule:: google.cloud.webrisk_v1.types
+ :members:
+ :undoc-members:
+ :show-inheritance:
diff --git a/owl-bot-staging/v1/docs/webrisk_v1/web_risk_service.rst b/owl-bot-staging/v1/docs/webrisk_v1/web_risk_service.rst
new file mode 100644
index 0000000..e67920a
--- /dev/null
+++ b/owl-bot-staging/v1/docs/webrisk_v1/web_risk_service.rst
@@ -0,0 +1,6 @@
+WebRiskService
+--------------------------------
+
+.. automodule:: google.cloud.webrisk_v1.services.web_risk_service
+ :members:
+ :inherited-members:
diff --git a/owl-bot-staging/v1/google/cloud/webrisk/__init__.py b/owl-bot-staging/v1/google/cloud/webrisk/__init__.py
new file mode 100644
index 0000000..03b698a
--- /dev/null
+++ b/owl-bot-staging/v1/google/cloud/webrisk/__init__.py
@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+from google.cloud.webrisk_v1.services.web_risk_service.client import WebRiskServiceClient
+from google.cloud.webrisk_v1.services.web_risk_service.async_client import WebRiskServiceAsyncClient
+
+from google.cloud.webrisk_v1.types.webrisk import ComputeThreatListDiffRequest
+from google.cloud.webrisk_v1.types.webrisk import ComputeThreatListDiffResponse
+from google.cloud.webrisk_v1.types.webrisk import CreateSubmissionRequest
+from google.cloud.webrisk_v1.types.webrisk import RawHashes
+from google.cloud.webrisk_v1.types.webrisk import RawIndices
+from google.cloud.webrisk_v1.types.webrisk import RiceDeltaEncoding
+from google.cloud.webrisk_v1.types.webrisk import SearchHashesRequest
+from google.cloud.webrisk_v1.types.webrisk import SearchHashesResponse
+from google.cloud.webrisk_v1.types.webrisk import SearchUrisRequest
+from google.cloud.webrisk_v1.types.webrisk import SearchUrisResponse
+from google.cloud.webrisk_v1.types.webrisk import Submission
+from google.cloud.webrisk_v1.types.webrisk import ThreatEntryAdditions
+from google.cloud.webrisk_v1.types.webrisk import ThreatEntryRemovals
+from google.cloud.webrisk_v1.types.webrisk import CompressionType
+from google.cloud.webrisk_v1.types.webrisk import ThreatType
+
+__all__ = ('WebRiskServiceClient',
+ 'WebRiskServiceAsyncClient',
+ 'ComputeThreatListDiffRequest',
+ 'ComputeThreatListDiffResponse',
+ 'CreateSubmissionRequest',
+ 'RawHashes',
+ 'RawIndices',
+ 'RiceDeltaEncoding',
+ 'SearchHashesRequest',
+ 'SearchHashesResponse',
+ 'SearchUrisRequest',
+ 'SearchUrisResponse',
+ 'Submission',
+ 'ThreatEntryAdditions',
+ 'ThreatEntryRemovals',
+ 'CompressionType',
+ 'ThreatType',
+)
diff --git a/owl-bot-staging/v1/google/cloud/webrisk/py.typed b/owl-bot-staging/v1/google/cloud/webrisk/py.typed
new file mode 100644
index 0000000..bef3da1
--- /dev/null
+++ b/owl-bot-staging/v1/google/cloud/webrisk/py.typed
@@ -0,0 +1,2 @@
+# Marker file for PEP 561.
+# The google-cloud-webrisk package uses inline types.
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/__init__.py b/owl-bot-staging/v1/google/cloud/webrisk_v1/__init__.py
new file mode 100644
index 0000000..0031bab
--- /dev/null
+++ b/owl-bot-staging/v1/google/cloud/webrisk_v1/__init__.py
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+from .services.web_risk_service import WebRiskServiceClient
+from .services.web_risk_service import WebRiskServiceAsyncClient
+
+from .types.webrisk import ComputeThreatListDiffRequest
+from .types.webrisk import ComputeThreatListDiffResponse
+from .types.webrisk import CreateSubmissionRequest
+from .types.webrisk import RawHashes
+from .types.webrisk import RawIndices
+from .types.webrisk import RiceDeltaEncoding
+from .types.webrisk import SearchHashesRequest
+from .types.webrisk import SearchHashesResponse
+from .types.webrisk import SearchUrisRequest
+from .types.webrisk import SearchUrisResponse
+from .types.webrisk import Submission
+from .types.webrisk import ThreatEntryAdditions
+from .types.webrisk import ThreatEntryRemovals
+from .types.webrisk import CompressionType
+from .types.webrisk import ThreatType
+
+__all__ = (
+ 'WebRiskServiceAsyncClient',
+'CompressionType',
+'ComputeThreatListDiffRequest',
+'ComputeThreatListDiffResponse',
+'CreateSubmissionRequest',
+'RawHashes',
+'RawIndices',
+'RiceDeltaEncoding',
+'SearchHashesRequest',
+'SearchHashesResponse',
+'SearchUrisRequest',
+'SearchUrisResponse',
+'Submission',
+'ThreatEntryAdditions',
+'ThreatEntryRemovals',
+'ThreatType',
+'WebRiskServiceClient',
+)
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/gapic_metadata.json b/owl-bot-staging/v1/google/cloud/webrisk_v1/gapic_metadata.json
new file mode 100644
index 0000000..fc56236
--- /dev/null
+++ b/owl-bot-staging/v1/google/cloud/webrisk_v1/gapic_metadata.json
@@ -0,0 +1,63 @@
+ {
+ "comment": "This file maps proto services/RPCs to the corresponding library clients/methods",
+ "language": "python",
+ "libraryPackage": "google.cloud.webrisk_v1",
+ "protoPackage": "google.cloud.webrisk.v1",
+ "schema": "1.0",
+ "services": {
+ "WebRiskService": {
+ "clients": {
+ "grpc": {
+ "libraryClient": "WebRiskServiceClient",
+ "rpcs": {
+ "ComputeThreatListDiff": {
+ "methods": [
+ "compute_threat_list_diff"
+ ]
+ },
+ "CreateSubmission": {
+ "methods": [
+ "create_submission"
+ ]
+ },
+ "SearchHashes": {
+ "methods": [
+ "search_hashes"
+ ]
+ },
+ "SearchUris": {
+ "methods": [
+ "search_uris"
+ ]
+ }
+ }
+ },
+ "grpc-async": {
+ "libraryClient": "WebRiskServiceAsyncClient",
+ "rpcs": {
+ "ComputeThreatListDiff": {
+ "methods": [
+ "compute_threat_list_diff"
+ ]
+ },
+ "CreateSubmission": {
+ "methods": [
+ "create_submission"
+ ]
+ },
+ "SearchHashes": {
+ "methods": [
+ "search_hashes"
+ ]
+ },
+ "SearchUris": {
+ "methods": [
+ "search_uris"
+ ]
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/py.typed b/owl-bot-staging/v1/google/cloud/webrisk_v1/py.typed
new file mode 100644
index 0000000..bef3da1
--- /dev/null
+++ b/owl-bot-staging/v1/google/cloud/webrisk_v1/py.typed
@@ -0,0 +1,2 @@
+# Marker file for PEP 561.
+# The google-cloud-webrisk package uses inline types.
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/services/__init__.py b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/__init__.py
new file mode 100644
index 0000000..4de6597
--- /dev/null
+++ b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/__init__.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/__init__.py b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/__init__.py
new file mode 100644
index 0000000..58b3140
--- /dev/null
+++ b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+from .client import WebRiskServiceClient
+from .async_client import WebRiskServiceAsyncClient
+
+__all__ = (
+ 'WebRiskServiceClient',
+ 'WebRiskServiceAsyncClient',
+)
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/async_client.py b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/async_client.py
new file mode 100644
index 0000000..91cd3ee
--- /dev/null
+++ b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/async_client.py
@@ -0,0 +1,541 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+from collections import OrderedDict
+import functools
+import re
+from typing import Dict, Sequence, Tuple, Type, Union
+import pkg_resources
+
+import google.api_core.client_options as ClientOptions # type: ignore
+from google.api_core import exceptions as core_exceptions # type: ignore
+from google.api_core import gapic_v1 # type: ignore
+from google.api_core import retry as retries # type: ignore
+from google.auth import credentials as ga_credentials # type: ignore
+from google.oauth2 import service_account # type: ignore
+
+from google.cloud.webrisk_v1.types import webrisk
+from google.protobuf import timestamp_pb2 # type: ignore
+from .transports.base import WebRiskServiceTransport, DEFAULT_CLIENT_INFO
+from .transports.grpc_asyncio import WebRiskServiceGrpcAsyncIOTransport
+from .client import WebRiskServiceClient
+
+
+class WebRiskServiceAsyncClient:
+ """Web Risk API defines an interface to detect malicious URLs on
+ your website and in client applications.
+ """
+
+ _client: WebRiskServiceClient
+
+ DEFAULT_ENDPOINT = WebRiskServiceClient.DEFAULT_ENDPOINT
+ DEFAULT_MTLS_ENDPOINT = WebRiskServiceClient.DEFAULT_MTLS_ENDPOINT
+
+ common_billing_account_path = staticmethod(WebRiskServiceClient.common_billing_account_path)
+ parse_common_billing_account_path = staticmethod(WebRiskServiceClient.parse_common_billing_account_path)
+ common_folder_path = staticmethod(WebRiskServiceClient.common_folder_path)
+ parse_common_folder_path = staticmethod(WebRiskServiceClient.parse_common_folder_path)
+ common_organization_path = staticmethod(WebRiskServiceClient.common_organization_path)
+ parse_common_organization_path = staticmethod(WebRiskServiceClient.parse_common_organization_path)
+ common_project_path = staticmethod(WebRiskServiceClient.common_project_path)
+ parse_common_project_path = staticmethod(WebRiskServiceClient.parse_common_project_path)
+ common_location_path = staticmethod(WebRiskServiceClient.common_location_path)
+ parse_common_location_path = staticmethod(WebRiskServiceClient.parse_common_location_path)
+
+ @classmethod
+ def from_service_account_info(cls, info: dict, *args, **kwargs):
+ """Creates an instance of this client using the provided credentials
+ info.
+
+ Args:
+ info (dict): The service account private key info.
+ args: Additional arguments to pass to the constructor.
+ kwargs: Additional arguments to pass to the constructor.
+
+ Returns:
+ WebRiskServiceAsyncClient: The constructed client.
+ """
+ return WebRiskServiceClient.from_service_account_info.__func__(WebRiskServiceAsyncClient, info, *args, **kwargs) # type: ignore
+
+ @classmethod
+ def from_service_account_file(cls, filename: str, *args, **kwargs):
+ """Creates an instance of this client using the provided credentials
+ file.
+
+ Args:
+ filename (str): The path to the service account private key json
+ file.
+ args: Additional arguments to pass to the constructor.
+ kwargs: Additional arguments to pass to the constructor.
+
+ Returns:
+ WebRiskServiceAsyncClient: The constructed client.
+ """
+ return WebRiskServiceClient.from_service_account_file.__func__(WebRiskServiceAsyncClient, filename, *args, **kwargs) # type: ignore
+
+ from_service_account_json = from_service_account_file
+
+ @property
+ def transport(self) -> WebRiskServiceTransport:
+ """Returns the transport used by the client instance.
+
+ Returns:
+ WebRiskServiceTransport: The transport used by the client instance.
+ """
+ return self._client.transport
+
+ get_transport_class = functools.partial(type(WebRiskServiceClient).get_transport_class, type(WebRiskServiceClient))
+
+ def __init__(self, *,
+ credentials: ga_credentials.Credentials = None,
+ transport: Union[str, WebRiskServiceTransport] = "grpc_asyncio",
+ client_options: ClientOptions = None,
+ client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
+ ) -> None:
+ """Instantiates the web risk service client.
+
+ Args:
+ credentials (Optional[google.auth.credentials.Credentials]): The
+ authorization credentials to attach to requests. These
+ credentials identify the application to the service; if none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ transport (Union[str, ~.WebRiskServiceTransport]): The
+ transport to use. If set to None, a transport is chosen
+ automatically.
+ client_options (ClientOptions): Custom options for the client. It
+ won't take effect if a ``transport`` instance is provided.
+ (1) The ``api_endpoint`` property can be used to override the
+ default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT
+ environment variable can also be used to override the endpoint:
+ "always" (always use the default mTLS endpoint), "never" (always
+ use the default regular endpoint) and "auto" (auto switch to the
+ default mTLS endpoint if client certificate is present, this is
+ the default value). However, the ``api_endpoint`` property takes
+ precedence if provided.
+ (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable
+ is "true", then the ``client_cert_source`` property can be used
+ to provide client certificate for mutual TLS transport. If
+ not provided, the default SSL client certificate will be used if
+ present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not
+ set, no client certificate will be used.
+
+ Raises:
+ google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport
+ creation failed for any reason.
+ """
+ self._client = WebRiskServiceClient(
+ credentials=credentials,
+ transport=transport,
+ client_options=client_options,
+ client_info=client_info,
+
+ )
+
+ async def compute_threat_list_diff(self,
+ request: webrisk.ComputeThreatListDiffRequest = None,
+ *,
+ threat_type: webrisk.ThreatType = None,
+ version_token: bytes = None,
+ constraints: webrisk.ComputeThreatListDiffRequest.Constraints = None,
+ retry: retries.Retry = gapic_v1.method.DEFAULT,
+ timeout: float = None,
+ metadata: Sequence[Tuple[str, str]] = (),
+ ) -> webrisk.ComputeThreatListDiffResponse:
+ r"""Gets the most recent threat list diffs. These diffs
+ should be applied to a local database of hashes to keep
+ it up-to-date. If the local database is empty or
+ excessively out-of-date, a complete snapshot of the
+ database will be returned. This Method only updates a
+ single ThreatList at a time. To update multiple
+ ThreatList databases, this method needs to be called
+ once for each list.
+
+ Args:
+ request (:class:`google.cloud.webrisk_v1.types.ComputeThreatListDiffRequest`):
+ The request object. Describes an API diff request.
+ threat_type (:class:`google.cloud.webrisk_v1.types.ThreatType`):
+ Required. The threat list to update.
+ Only a single ThreatType should be
+ specified.
+
+ This corresponds to the ``threat_type`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ version_token (:class:`bytes`):
+ The current version token of the
+ client for the requested list (the
+ client version that was received from
+ the last successful diff). If the client
+ does not have a version token (this is
+ the first time calling
+ ComputeThreatListDiff), this may be left
+ empty and a full database snapshot will
+ be returned.
+
+ This corresponds to the ``version_token`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ constraints (:class:`google.cloud.webrisk_v1.types.ComputeThreatListDiffRequest.Constraints`):
+ Required. The constraints associated
+ with this request.
+
+ This corresponds to the ``constraints`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ should be retried.
+ timeout (float): The timeout for this request.
+ metadata (Sequence[Tuple[str, str]]): Strings which should be
+ sent along with the request as metadata.
+
+ Returns:
+ google.cloud.webrisk_v1.types.ComputeThreatListDiffResponse:
+
+ """
+ # Create or coerce a protobuf request object.
+ # Sanity check: If we got a request object, we should *not* have
+ # gotten any keyword arguments that map to the request.
+ has_flattened_params = any([threat_type, version_token, constraints])
+ if request is not None and has_flattened_params:
+ raise ValueError("If the `request` argument is set, then none of "
+ "the individual field arguments should be set.")
+
+ request = webrisk.ComputeThreatListDiffRequest(request)
+
+ # If we have keyword arguments corresponding to fields on the
+ # request, apply these.
+ if threat_type is not None:
+ request.threat_type = threat_type
+ if version_token is not None:
+ request.version_token = version_token
+ if constraints is not None:
+ request.constraints = constraints
+
+ # Wrap the RPC method; this adds retry and timeout information,
+ # and friendly error handling.
+ rpc = gapic_v1.method_async.wrap_method(
+ self._client._transport.compute_threat_list_diff,
+ default_retry=retries.Retry(
+initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
+ core_exceptions.DeadlineExceeded,
+ core_exceptions.ServiceUnavailable,
+ ),
+ deadline=600.0,
+ ),
+ default_timeout=600.0,
+ client_info=DEFAULT_CLIENT_INFO,
+ )
+
+ # Send the request.
+ response = await rpc(
+ request,
+ retry=retry,
+ timeout=timeout,
+ metadata=metadata,
+ )
+
+ # Done; return the response.
+ return response
+
+ async def search_uris(self,
+ request: webrisk.SearchUrisRequest = None,
+ *,
+ uri: str = None,
+ threat_types: Sequence[webrisk.ThreatType] = None,
+ retry: retries.Retry = gapic_v1.method.DEFAULT,
+ timeout: float = None,
+ metadata: Sequence[Tuple[str, str]] = (),
+ ) -> webrisk.SearchUrisResponse:
+ r"""This method is used to check whether a URI is on a
+ given threatList. Multiple threatLists may be searched
+ in a single query. The response will list all requested
+ threatLists the URI was found to match. If the URI is
+ not found on any of the requested ThreatList an empty
+ response will be returned.
+
+ Args:
+ request (:class:`google.cloud.webrisk_v1.types.SearchUrisRequest`):
+ The request object. Request to check URI entries against
+ threatLists.
+ uri (:class:`str`):
+ Required. The URI to be checked for
+ matches.
+
+ This corresponds to the ``uri`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ threat_types (:class:`Sequence[google.cloud.webrisk_v1.types.ThreatType]`):
+ Required. The ThreatLists to search
+ in. Multiple ThreatLists may be
+ specified.
+
+ This corresponds to the ``threat_types`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ should be retried.
+ timeout (float): The timeout for this request.
+ metadata (Sequence[Tuple[str, str]]): Strings which should be
+ sent along with the request as metadata.
+
+ Returns:
+ google.cloud.webrisk_v1.types.SearchUrisResponse:
+
+ """
+ # Create or coerce a protobuf request object.
+ # Sanity check: If we got a request object, we should *not* have
+ # gotten any keyword arguments that map to the request.
+ has_flattened_params = any([uri, threat_types])
+ if request is not None and has_flattened_params:
+ raise ValueError("If the `request` argument is set, then none of "
+ "the individual field arguments should be set.")
+
+ request = webrisk.SearchUrisRequest(request)
+
+ # If we have keyword arguments corresponding to fields on the
+ # request, apply these.
+ if uri is not None:
+ request.uri = uri
+ if threat_types:
+ request.threat_types.extend(threat_types)
+
+ # Wrap the RPC method; this adds retry and timeout information,
+ # and friendly error handling.
+ rpc = gapic_v1.method_async.wrap_method(
+ self._client._transport.search_uris,
+ default_retry=retries.Retry(
+initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
+ core_exceptions.DeadlineExceeded,
+ core_exceptions.ServiceUnavailable,
+ ),
+ deadline=600.0,
+ ),
+ default_timeout=600.0,
+ client_info=DEFAULT_CLIENT_INFO,
+ )
+
+ # Send the request.
+ response = await rpc(
+ request,
+ retry=retry,
+ timeout=timeout,
+ metadata=metadata,
+ )
+
+ # Done; return the response.
+ return response
+
+ async def search_hashes(self,
+ request: webrisk.SearchHashesRequest = None,
+ *,
+ hash_prefix: bytes = None,
+ threat_types: Sequence[webrisk.ThreatType] = None,
+ retry: retries.Retry = gapic_v1.method.DEFAULT,
+ timeout: float = None,
+ metadata: Sequence[Tuple[str, str]] = (),
+ ) -> webrisk.SearchHashesResponse:
+ r"""Gets the full hashes that match the requested hash
+ prefix. This is used after a hash prefix is looked up in
+ a threatList and there is a match. The client side
+ threatList only holds partial hashes so the client must
+ query this method to determine if there is a full hash
+ match of a threat.
+
+ Args:
+ request (:class:`google.cloud.webrisk_v1.types.SearchHashesRequest`):
+ The request object. Request to return full hashes
+ matched by the provided hash prefixes.
+ hash_prefix (:class:`bytes`):
+ A hash prefix, consisting of the most
+ significant 4-32 bytes of a SHA256 hash.
+ For JSON requests, this field is
+ base64-encoded.
+
+ This corresponds to the ``hash_prefix`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ threat_types (:class:`Sequence[google.cloud.webrisk_v1.types.ThreatType]`):
+ Required. The ThreatLists to search
+ in. Multiple ThreatLists may be
+ specified.
+
+ This corresponds to the ``threat_types`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ should be retried.
+ timeout (float): The timeout for this request.
+ metadata (Sequence[Tuple[str, str]]): Strings which should be
+ sent along with the request as metadata.
+
+ Returns:
+ google.cloud.webrisk_v1.types.SearchHashesResponse:
+
+ """
+ # Create or coerce a protobuf request object.
+ # Sanity check: If we got a request object, we should *not* have
+ # gotten any keyword arguments that map to the request.
+ has_flattened_params = any([hash_prefix, threat_types])
+ if request is not None and has_flattened_params:
+ raise ValueError("If the `request` argument is set, then none of "
+ "the individual field arguments should be set.")
+
+ request = webrisk.SearchHashesRequest(request)
+
+ # If we have keyword arguments corresponding to fields on the
+ # request, apply these.
+ if hash_prefix is not None:
+ request.hash_prefix = hash_prefix
+ if threat_types:
+ request.threat_types.extend(threat_types)
+
+ # Wrap the RPC method; this adds retry and timeout information,
+ # and friendly error handling.
+ rpc = gapic_v1.method_async.wrap_method(
+ self._client._transport.search_hashes,
+ default_retry=retries.Retry(
+initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
+ core_exceptions.DeadlineExceeded,
+ core_exceptions.ServiceUnavailable,
+ ),
+ deadline=600.0,
+ ),
+ default_timeout=600.0,
+ client_info=DEFAULT_CLIENT_INFO,
+ )
+
+ # Send the request.
+ response = await rpc(
+ request,
+ retry=retry,
+ timeout=timeout,
+ metadata=metadata,
+ )
+
+ # Done; return the response.
+ return response
+
+ async def create_submission(self,
+ request: webrisk.CreateSubmissionRequest = None,
+ *,
+ parent: str = None,
+ submission: webrisk.Submission = None,
+ retry: retries.Retry = gapic_v1.method.DEFAULT,
+ timeout: float = None,
+ metadata: Sequence[Tuple[str, str]] = (),
+ ) -> webrisk.Submission:
+ r"""Creates a Submission of a URI suspected of containing phishing
+ content to be reviewed. If the result verifies the existence of
+ malicious phishing content, the site will be added to the
+ `Google's Social Engineering
+ lists `__
+ in order to protect users that could get exposed to this threat
+ in the future. Only projects with CREATE_SUBMISSION_USERS
+ visibility can use this method.
+
+ Args:
+ request (:class:`google.cloud.webrisk_v1.types.CreateSubmissionRequest`):
+ The request object. Request to send a potentially phishy
+ URI to WebRisk.
+ parent (:class:`str`):
+ Required. The name of the project that is making the
+ submission. This string is in the format
+ "projects/{project_number}".
+
+ This corresponds to the ``parent`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ submission (:class:`google.cloud.webrisk_v1.types.Submission`):
+ Required. The submission that
+ contains the content of the phishing
+ report.
+
+ This corresponds to the ``submission`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ should be retried.
+ timeout (float): The timeout for this request.
+ metadata (Sequence[Tuple[str, str]]): Strings which should be
+ sent along with the request as metadata.
+
+ Returns:
+ google.cloud.webrisk_v1.types.Submission:
+ Wraps a URI that might be displaying
+ phishing content.
+
+ """
+ # Create or coerce a protobuf request object.
+ # Sanity check: If we got a request object, we should *not* have
+ # gotten any keyword arguments that map to the request.
+ has_flattened_params = any([parent, submission])
+ if request is not None and has_flattened_params:
+ raise ValueError("If the `request` argument is set, then none of "
+ "the individual field arguments should be set.")
+
+ request = webrisk.CreateSubmissionRequest(request)
+
+ # If we have keyword arguments corresponding to fields on the
+ # request, apply these.
+ if parent is not None:
+ request.parent = parent
+ if submission is not None:
+ request.submission = submission
+
+ # Wrap the RPC method; this adds retry and timeout information,
+ # and friendly error handling.
+ rpc = gapic_v1.method_async.wrap_method(
+ self._client._transport.create_submission,
+ default_timeout=60.0,
+ client_info=DEFAULT_CLIENT_INFO,
+ )
+
+ # Certain fields should be provided within the metadata header;
+ # add these here.
+ metadata = tuple(metadata) + (
+ gapic_v1.routing_header.to_grpc_metadata((
+ ("parent", request.parent),
+ )),
+ )
+
+ # Send the request.
+ response = await rpc(
+ request,
+ retry=retry,
+ timeout=timeout,
+ metadata=metadata,
+ )
+
+ # Done; return the response.
+ return response
+
+
+
+
+
+try:
+ DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(
+ gapic_version=pkg_resources.get_distribution(
+ "google-cloud-webrisk",
+ ).version,
+ )
+except pkg_resources.DistributionNotFound:
+ DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo()
+
+
+__all__ = (
+ "WebRiskServiceAsyncClient",
+)
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/client.py b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/client.py
new file mode 100644
index 0000000..6d3b99c
--- /dev/null
+++ b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/client.py
@@ -0,0 +1,698 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+from collections import OrderedDict
+from distutils import util
+import os
+import re
+from typing import Callable, Dict, Optional, Sequence, Tuple, Type, Union
+import pkg_resources
+
+from google.api_core import client_options as client_options_lib # type: ignore
+from google.api_core import exceptions as core_exceptions # type: ignore
+from google.api_core import gapic_v1 # type: ignore
+from google.api_core import retry as retries # type: ignore
+from google.auth import credentials as ga_credentials # type: ignore
+from google.auth.transport import mtls # type: ignore
+from google.auth.transport.grpc import SslCredentials # type: ignore
+from google.auth.exceptions import MutualTLSChannelError # type: ignore
+from google.oauth2 import service_account # type: ignore
+
+from google.cloud.webrisk_v1.types import webrisk
+from google.protobuf import timestamp_pb2 # type: ignore
+from .transports.base import WebRiskServiceTransport, DEFAULT_CLIENT_INFO
+from .transports.grpc import WebRiskServiceGrpcTransport
+from .transports.grpc_asyncio import WebRiskServiceGrpcAsyncIOTransport
+
+
+class WebRiskServiceClientMeta(type):
+ """Metaclass for the WebRiskService client.
+
+ This provides class-level methods for building and retrieving
+ support objects (e.g. transport) without polluting the client instance
+ objects.
+ """
+ _transport_registry = OrderedDict() # type: Dict[str, Type[WebRiskServiceTransport]]
+ _transport_registry["grpc"] = WebRiskServiceGrpcTransport
+ _transport_registry["grpc_asyncio"] = WebRiskServiceGrpcAsyncIOTransport
+
+ def get_transport_class(cls,
+ label: str = None,
+ ) -> Type[WebRiskServiceTransport]:
+ """Returns an appropriate transport class.
+
+ Args:
+ label: The name of the desired transport. If none is
+ provided, then the first transport in the registry is used.
+
+ Returns:
+ The transport class to use.
+ """
+ # If a specific transport is requested, return that one.
+ if label:
+ return cls._transport_registry[label]
+
+ # No transport is requested; return the default (that is, the first one
+ # in the dictionary).
+ return next(iter(cls._transport_registry.values()))
+
+
+class WebRiskServiceClient(metaclass=WebRiskServiceClientMeta):
+ """Web Risk API defines an interface to detect malicious URLs on
+ your website and in client applications.
+ """
+
+ @staticmethod
+ def _get_default_mtls_endpoint(api_endpoint):
+ """Converts api endpoint to mTLS endpoint.
+
+ Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to
+ "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively.
+ Args:
+ api_endpoint (Optional[str]): the api endpoint to convert.
+ Returns:
+ str: converted mTLS api endpoint.
+ """
+ if not api_endpoint:
+ return api_endpoint
+
+ mtls_endpoint_re = re.compile(
+ r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?"
+ )
+
+ m = mtls_endpoint_re.match(api_endpoint)
+ name, mtls, sandbox, googledomain = m.groups()
+ if mtls or not googledomain:
+ return api_endpoint
+
+ if sandbox:
+ return api_endpoint.replace(
+ "sandbox.googleapis.com", "mtls.sandbox.googleapis.com"
+ )
+
+ return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com")
+
+ DEFAULT_ENDPOINT = "webrisk.googleapis.com"
+ DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore
+ DEFAULT_ENDPOINT
+ )
+
+ @classmethod
+ def from_service_account_info(cls, info: dict, *args, **kwargs):
+ """Creates an instance of this client using the provided credentials
+ info.
+
+ Args:
+ info (dict): The service account private key info.
+ args: Additional arguments to pass to the constructor.
+ kwargs: Additional arguments to pass to the constructor.
+
+ Returns:
+ WebRiskServiceClient: The constructed client.
+ """
+ credentials = service_account.Credentials.from_service_account_info(info)
+ kwargs["credentials"] = credentials
+ return cls(*args, **kwargs)
+
+ @classmethod
+ def from_service_account_file(cls, filename: str, *args, **kwargs):
+ """Creates an instance of this client using the provided credentials
+ file.
+
+ Args:
+ filename (str): The path to the service account private key json
+ file.
+ args: Additional arguments to pass to the constructor.
+ kwargs: Additional arguments to pass to the constructor.
+
+ Returns:
+ WebRiskServiceClient: The constructed client.
+ """
+ credentials = service_account.Credentials.from_service_account_file(
+ filename)
+ kwargs["credentials"] = credentials
+ return cls(*args, **kwargs)
+
+ from_service_account_json = from_service_account_file
+
+ @property
+ def transport(self) -> WebRiskServiceTransport:
+ """Returns the transport used by the client instance.
+
+ Returns:
+ WebRiskServiceTransport: The transport used by the client
+ instance.
+ """
+ return self._transport
+
+ @staticmethod
+ def common_billing_account_path(billing_account: str, ) -> str:
+ """Returns a fully-qualified billing_account string."""
+ return "billingAccounts/{billing_account}".format(billing_account=billing_account, )
+
+ @staticmethod
+ def parse_common_billing_account_path(path: str) -> Dict[str,str]:
+ """Parse a billing_account path into its component segments."""
+ m = re.match(r"^billingAccounts/(?P.+?)$", path)
+ return m.groupdict() if m else {}
+
+ @staticmethod
+ def common_folder_path(folder: str, ) -> str:
+ """Returns a fully-qualified folder string."""
+ return "folders/{folder}".format(folder=folder, )
+
+ @staticmethod
+ def parse_common_folder_path(path: str) -> Dict[str,str]:
+ """Parse a folder path into its component segments."""
+ m = re.match(r"^folders/(?P.+?)$", path)
+ return m.groupdict() if m else {}
+
+ @staticmethod
+ def common_organization_path(organization: str, ) -> str:
+ """Returns a fully-qualified organization string."""
+ return "organizations/{organization}".format(organization=organization, )
+
+ @staticmethod
+ def parse_common_organization_path(path: str) -> Dict[str,str]:
+ """Parse a organization path into its component segments."""
+ m = re.match(r"^organizations/(?P.+?)$", path)
+ return m.groupdict() if m else {}
+
+ @staticmethod
+ def common_project_path(project: str, ) -> str:
+ """Returns a fully-qualified project string."""
+ return "projects/{project}".format(project=project, )
+
+ @staticmethod
+ def parse_common_project_path(path: str) -> Dict[str,str]:
+ """Parse a project path into its component segments."""
+ m = re.match(r"^projects/(?P.+?)$", path)
+ return m.groupdict() if m else {}
+
+ @staticmethod
+ def common_location_path(project: str, location: str, ) -> str:
+ """Returns a fully-qualified location string."""
+ return "projects/{project}/locations/{location}".format(project=project, location=location, )
+
+ @staticmethod
+ def parse_common_location_path(path: str) -> Dict[str,str]:
+ """Parse a location path into its component segments."""
+ m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path)
+ return m.groupdict() if m else {}
+
+ def __init__(self, *,
+ credentials: Optional[ga_credentials.Credentials] = None,
+ transport: Union[str, WebRiskServiceTransport, None] = None,
+ client_options: Optional[client_options_lib.ClientOptions] = None,
+ client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
+ ) -> None:
+ """Instantiates the web risk service client.
+
+ Args:
+ credentials (Optional[google.auth.credentials.Credentials]): The
+ authorization credentials to attach to requests. These
+ credentials identify the application to the service; if none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ transport (Union[str, WebRiskServiceTransport]): The
+ transport to use. If set to None, a transport is chosen
+ automatically.
+ client_options (google.api_core.client_options.ClientOptions): Custom options for the
+ client. It won't take effect if a ``transport`` instance is provided.
+ (1) The ``api_endpoint`` property can be used to override the
+ default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT
+ environment variable can also be used to override the endpoint:
+ "always" (always use the default mTLS endpoint), "never" (always
+ use the default regular endpoint) and "auto" (auto switch to the
+ default mTLS endpoint if client certificate is present, this is
+ the default value). However, the ``api_endpoint`` property takes
+ precedence if provided.
+ (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable
+ is "true", then the ``client_cert_source`` property can be used
+ to provide client certificate for mutual TLS transport. If
+ not provided, the default SSL client certificate will be used if
+ present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not
+ set, no client certificate will be used.
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
+ The client info used to send a user-agent string along with
+ API requests. If ``None``, then default info will be used.
+ Generally, you only need to set this if you're developing
+ your own client library.
+
+ Raises:
+ google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport
+ creation failed for any reason.
+ """
+ if isinstance(client_options, dict):
+ client_options = client_options_lib.from_dict(client_options)
+ if client_options is None:
+ client_options = client_options_lib.ClientOptions()
+
+ # Create SSL credentials for mutual TLS if needed.
+ use_client_cert = bool(util.strtobool(os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false")))
+
+ client_cert_source_func = None
+ is_mtls = False
+ if use_client_cert:
+ if client_options.client_cert_source:
+ is_mtls = True
+ client_cert_source_func = client_options.client_cert_source
+ else:
+ is_mtls = mtls.has_default_client_cert_source()
+ if is_mtls:
+ client_cert_source_func = mtls.default_client_cert_source()
+ else:
+ client_cert_source_func = None
+
+ # Figure out which api endpoint to use.
+ if client_options.api_endpoint is not None:
+ api_endpoint = client_options.api_endpoint
+ else:
+ use_mtls_env = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto")
+ if use_mtls_env == "never":
+ api_endpoint = self.DEFAULT_ENDPOINT
+ elif use_mtls_env == "always":
+ api_endpoint = self.DEFAULT_MTLS_ENDPOINT
+ elif use_mtls_env == "auto":
+ if is_mtls:
+ api_endpoint = self.DEFAULT_MTLS_ENDPOINT
+ else:
+ api_endpoint = self.DEFAULT_ENDPOINT
+ else:
+ raise MutualTLSChannelError(
+ "Unsupported GOOGLE_API_USE_MTLS_ENDPOINT value. Accepted "
+ "values: never, auto, always"
+ )
+
+ # Save or instantiate the transport.
+ # Ordinarily, we provide the transport, but allowing a custom transport
+ # instance provides an extensibility point for unusual situations.
+ if isinstance(transport, WebRiskServiceTransport):
+ # transport is a WebRiskServiceTransport instance.
+ if credentials or client_options.credentials_file:
+ raise ValueError("When providing a transport instance, "
+ "provide its credentials directly.")
+ if client_options.scopes:
+ raise ValueError(
+ "When providing a transport instance, provide its scopes "
+ "directly."
+ )
+ self._transport = transport
+ else:
+ Transport = type(self).get_transport_class(transport)
+ self._transport = Transport(
+ credentials=credentials,
+ credentials_file=client_options.credentials_file,
+ host=api_endpoint,
+ scopes=client_options.scopes,
+ client_cert_source_for_mtls=client_cert_source_func,
+ quota_project_id=client_options.quota_project_id,
+ client_info=client_info,
+ )
+
+ def compute_threat_list_diff(self,
+ request: webrisk.ComputeThreatListDiffRequest = None,
+ *,
+ threat_type: webrisk.ThreatType = None,
+ version_token: bytes = None,
+ constraints: webrisk.ComputeThreatListDiffRequest.Constraints = None,
+ retry: retries.Retry = gapic_v1.method.DEFAULT,
+ timeout: float = None,
+ metadata: Sequence[Tuple[str, str]] = (),
+ ) -> webrisk.ComputeThreatListDiffResponse:
+ r"""Gets the most recent threat list diffs. These diffs
+ should be applied to a local database of hashes to keep
+ it up-to-date. If the local database is empty or
+ excessively out-of-date, a complete snapshot of the
+ database will be returned. This Method only updates a
+ single ThreatList at a time. To update multiple
+ ThreatList databases, this method needs to be called
+ once for each list.
+
+ Args:
+ request (google.cloud.webrisk_v1.types.ComputeThreatListDiffRequest):
+ The request object. Describes an API diff request.
+ threat_type (google.cloud.webrisk_v1.types.ThreatType):
+ Required. The threat list to update.
+ Only a single ThreatType should be
+ specified.
+
+ This corresponds to the ``threat_type`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ version_token (bytes):
+ The current version token of the
+ client for the requested list (the
+ client version that was received from
+ the last successful diff). If the client
+ does not have a version token (this is
+ the first time calling
+ ComputeThreatListDiff), this may be left
+ empty and a full database snapshot will
+ be returned.
+
+ This corresponds to the ``version_token`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ constraints (google.cloud.webrisk_v1.types.ComputeThreatListDiffRequest.Constraints):
+ Required. The constraints associated
+ with this request.
+
+ This corresponds to the ``constraints`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ should be retried.
+ timeout (float): The timeout for this request.
+ metadata (Sequence[Tuple[str, str]]): Strings which should be
+ sent along with the request as metadata.
+
+ Returns:
+ google.cloud.webrisk_v1.types.ComputeThreatListDiffResponse:
+
+ """
+ # Create or coerce a protobuf request object.
+ # Sanity check: If we got a request object, we should *not* have
+ # gotten any keyword arguments that map to the request.
+ has_flattened_params = any([threat_type, version_token, constraints])
+ if request is not None and has_flattened_params:
+ raise ValueError('If the `request` argument is set, then none of '
+ 'the individual field arguments should be set.')
+
+ # Minor optimization to avoid making a copy if the user passes
+ # in a webrisk.ComputeThreatListDiffRequest.
+ # There's no risk of modifying the input as we've already verified
+ # there are no flattened fields.
+ if not isinstance(request, webrisk.ComputeThreatListDiffRequest):
+ request = webrisk.ComputeThreatListDiffRequest(request)
+ # If we have keyword arguments corresponding to fields on the
+ # request, apply these.
+ if threat_type is not None:
+ request.threat_type = threat_type
+ if version_token is not None:
+ request.version_token = version_token
+ if constraints is not None:
+ request.constraints = constraints
+
+ # Wrap the RPC method; this adds retry and timeout information,
+ # and friendly error handling.
+ rpc = self._transport._wrapped_methods[self._transport.compute_threat_list_diff]
+
+ # Send the request.
+ response = rpc(
+ request,
+ retry=retry,
+ timeout=timeout,
+ metadata=metadata,
+ )
+
+ # Done; return the response.
+ return response
+
+ def search_uris(self,
+ request: webrisk.SearchUrisRequest = None,
+ *,
+ uri: str = None,
+ threat_types: Sequence[webrisk.ThreatType] = None,
+ retry: retries.Retry = gapic_v1.method.DEFAULT,
+ timeout: float = None,
+ metadata: Sequence[Tuple[str, str]] = (),
+ ) -> webrisk.SearchUrisResponse:
+ r"""This method is used to check whether a URI is on a
+ given threatList. Multiple threatLists may be searched
+ in a single query. The response will list all requested
+ threatLists the URI was found to match. If the URI is
+ not found on any of the requested ThreatList an empty
+ response will be returned.
+
+ Args:
+ request (google.cloud.webrisk_v1.types.SearchUrisRequest):
+ The request object. Request to check URI entries against
+ threatLists.
+ uri (str):
+ Required. The URI to be checked for
+ matches.
+
+ This corresponds to the ``uri`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ threat_types (Sequence[google.cloud.webrisk_v1.types.ThreatType]):
+ Required. The ThreatLists to search
+ in. Multiple ThreatLists may be
+ specified.
+
+ This corresponds to the ``threat_types`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ should be retried.
+ timeout (float): The timeout for this request.
+ metadata (Sequence[Tuple[str, str]]): Strings which should be
+ sent along with the request as metadata.
+
+ Returns:
+ google.cloud.webrisk_v1.types.SearchUrisResponse:
+
+ """
+ # Create or coerce a protobuf request object.
+ # Sanity check: If we got a request object, we should *not* have
+ # gotten any keyword arguments that map to the request.
+ has_flattened_params = any([uri, threat_types])
+ if request is not None and has_flattened_params:
+ raise ValueError('If the `request` argument is set, then none of '
+ 'the individual field arguments should be set.')
+
+ # Minor optimization to avoid making a copy if the user passes
+ # in a webrisk.SearchUrisRequest.
+ # There's no risk of modifying the input as we've already verified
+ # there are no flattened fields.
+ if not isinstance(request, webrisk.SearchUrisRequest):
+ request = webrisk.SearchUrisRequest(request)
+ # If we have keyword arguments corresponding to fields on the
+ # request, apply these.
+ if uri is not None:
+ request.uri = uri
+ if threat_types is not None:
+ request.threat_types = threat_types
+
+ # Wrap the RPC method; this adds retry and timeout information,
+ # and friendly error handling.
+ rpc = self._transport._wrapped_methods[self._transport.search_uris]
+
+ # Send the request.
+ response = rpc(
+ request,
+ retry=retry,
+ timeout=timeout,
+ metadata=metadata,
+ )
+
+ # Done; return the response.
+ return response
+
+ def search_hashes(self,
+ request: webrisk.SearchHashesRequest = None,
+ *,
+ hash_prefix: bytes = None,
+ threat_types: Sequence[webrisk.ThreatType] = None,
+ retry: retries.Retry = gapic_v1.method.DEFAULT,
+ timeout: float = None,
+ metadata: Sequence[Tuple[str, str]] = (),
+ ) -> webrisk.SearchHashesResponse:
+ r"""Gets the full hashes that match the requested hash
+ prefix. This is used after a hash prefix is looked up in
+ a threatList and there is a match. The client side
+ threatList only holds partial hashes so the client must
+ query this method to determine if there is a full hash
+ match of a threat.
+
+ Args:
+ request (google.cloud.webrisk_v1.types.SearchHashesRequest):
+ The request object. Request to return full hashes
+ matched by the provided hash prefixes.
+ hash_prefix (bytes):
+ A hash prefix, consisting of the most
+ significant 4-32 bytes of a SHA256 hash.
+ For JSON requests, this field is
+ base64-encoded.
+
+ This corresponds to the ``hash_prefix`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ threat_types (Sequence[google.cloud.webrisk_v1.types.ThreatType]):
+ Required. The ThreatLists to search
+ in. Multiple ThreatLists may be
+ specified.
+
+ This corresponds to the ``threat_types`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ should be retried.
+ timeout (float): The timeout for this request.
+ metadata (Sequence[Tuple[str, str]]): Strings which should be
+ sent along with the request as metadata.
+
+ Returns:
+ google.cloud.webrisk_v1.types.SearchHashesResponse:
+
+ """
+ # Create or coerce a protobuf request object.
+ # Sanity check: If we got a request object, we should *not* have
+ # gotten any keyword arguments that map to the request.
+ has_flattened_params = any([hash_prefix, threat_types])
+ if request is not None and has_flattened_params:
+ raise ValueError('If the `request` argument is set, then none of '
+ 'the individual field arguments should be set.')
+
+ # Minor optimization to avoid making a copy if the user passes
+ # in a webrisk.SearchHashesRequest.
+ # There's no risk of modifying the input as we've already verified
+ # there are no flattened fields.
+ if not isinstance(request, webrisk.SearchHashesRequest):
+ request = webrisk.SearchHashesRequest(request)
+ # If we have keyword arguments corresponding to fields on the
+ # request, apply these.
+ if hash_prefix is not None:
+ request.hash_prefix = hash_prefix
+ if threat_types is not None:
+ request.threat_types = threat_types
+
+ # Wrap the RPC method; this adds retry and timeout information,
+ # and friendly error handling.
+ rpc = self._transport._wrapped_methods[self._transport.search_hashes]
+
+ # Send the request.
+ response = rpc(
+ request,
+ retry=retry,
+ timeout=timeout,
+ metadata=metadata,
+ )
+
+ # Done; return the response.
+ return response
+
+ def create_submission(self,
+ request: webrisk.CreateSubmissionRequest = None,
+ *,
+ parent: str = None,
+ submission: webrisk.Submission = None,
+ retry: retries.Retry = gapic_v1.method.DEFAULT,
+ timeout: float = None,
+ metadata: Sequence[Tuple[str, str]] = (),
+ ) -> webrisk.Submission:
+ r"""Creates a Submission of a URI suspected of containing phishing
+ content to be reviewed. If the result verifies the existence of
+ malicious phishing content, the site will be added to the
+ `Google's Social Engineering
+ lists `__
+ in order to protect users that could get exposed to this threat
+ in the future. Only projects with CREATE_SUBMISSION_USERS
+ visibility can use this method.
+
+ Args:
+ request (google.cloud.webrisk_v1.types.CreateSubmissionRequest):
+ The request object. Request to send a potentially phishy
+ URI to WebRisk.
+ parent (str):
+ Required. The name of the project that is making the
+ submission. This string is in the format
+ "projects/{project_number}".
+
+ This corresponds to the ``parent`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ submission (google.cloud.webrisk_v1.types.Submission):
+ Required. The submission that
+ contains the content of the phishing
+ report.
+
+ This corresponds to the ``submission`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ should be retried.
+ timeout (float): The timeout for this request.
+ metadata (Sequence[Tuple[str, str]]): Strings which should be
+ sent along with the request as metadata.
+
+ Returns:
+ google.cloud.webrisk_v1.types.Submission:
+ Wraps a URI that might be displaying
+ phishing content.
+
+ """
+ # Create or coerce a protobuf request object.
+ # Sanity check: If we got a request object, we should *not* have
+ # gotten any keyword arguments that map to the request.
+ has_flattened_params = any([parent, submission])
+ if request is not None and has_flattened_params:
+ raise ValueError('If the `request` argument is set, then none of '
+ 'the individual field arguments should be set.')
+
+ # Minor optimization to avoid making a copy if the user passes
+ # in a webrisk.CreateSubmissionRequest.
+ # There's no risk of modifying the input as we've already verified
+ # there are no flattened fields.
+ if not isinstance(request, webrisk.CreateSubmissionRequest):
+ request = webrisk.CreateSubmissionRequest(request)
+ # If we have keyword arguments corresponding to fields on the
+ # request, apply these.
+ if parent is not None:
+ request.parent = parent
+ if submission is not None:
+ request.submission = submission
+
+ # Wrap the RPC method; this adds retry and timeout information,
+ # and friendly error handling.
+ rpc = self._transport._wrapped_methods[self._transport.create_submission]
+
+ # Certain fields should be provided within the metadata header;
+ # add these here.
+ metadata = tuple(metadata) + (
+ gapic_v1.routing_header.to_grpc_metadata((
+ ("parent", request.parent),
+ )),
+ )
+
+ # Send the request.
+ response = rpc(
+ request,
+ retry=retry,
+ timeout=timeout,
+ metadata=metadata,
+ )
+
+ # Done; return the response.
+ return response
+
+
+
+
+
+try:
+ DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(
+ gapic_version=pkg_resources.get_distribution(
+ "google-cloud-webrisk",
+ ).version,
+ )
+except pkg_resources.DistributionNotFound:
+ DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo()
+
+
+__all__ = (
+ "WebRiskServiceClient",
+)
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/__init__.py b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/__init__.py
new file mode 100644
index 0000000..c724451
--- /dev/null
+++ b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/__init__.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+from collections import OrderedDict
+from typing import Dict, Type
+
+from .base import WebRiskServiceTransport
+from .grpc import WebRiskServiceGrpcTransport
+from .grpc_asyncio import WebRiskServiceGrpcAsyncIOTransport
+
+
+# Compile a registry of transports.
+_transport_registry = OrderedDict() # type: Dict[str, Type[WebRiskServiceTransport]]
+_transport_registry['grpc'] = WebRiskServiceGrpcTransport
+_transport_registry['grpc_asyncio'] = WebRiskServiceGrpcAsyncIOTransport
+
+__all__ = (
+ 'WebRiskServiceTransport',
+ 'WebRiskServiceGrpcTransport',
+ 'WebRiskServiceGrpcAsyncIOTransport',
+)
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/base.py b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/base.py
new file mode 100644
index 0000000..fe8c43f
--- /dev/null
+++ b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/base.py
@@ -0,0 +1,231 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+import abc
+from typing import Awaitable, Callable, Dict, Optional, Sequence, Union
+import packaging.version
+import pkg_resources
+
+import google.auth # type: ignore
+import google.api_core # type: ignore
+from google.api_core import exceptions as core_exceptions # type: ignore
+from google.api_core import gapic_v1 # type: ignore
+from google.api_core import retry as retries # type: ignore
+from google.auth import credentials as ga_credentials # type: ignore
+from google.oauth2 import service_account # type: ignore
+
+from google.cloud.webrisk_v1.types import webrisk
+
+try:
+ DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(
+ gapic_version=pkg_resources.get_distribution(
+ 'google-cloud-webrisk',
+ ).version,
+ )
+except pkg_resources.DistributionNotFound:
+ DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo()
+
+try:
+ # google.auth.__version__ was added in 1.26.0
+ _GOOGLE_AUTH_VERSION = google.auth.__version__
+except AttributeError:
+ try: # try pkg_resources if it is available
+ _GOOGLE_AUTH_VERSION = pkg_resources.get_distribution("google-auth").version
+ except pkg_resources.DistributionNotFound: # pragma: NO COVER
+ _GOOGLE_AUTH_VERSION = None
+
+
+class WebRiskServiceTransport(abc.ABC):
+ """Abstract transport class for WebRiskService."""
+
+ AUTH_SCOPES = (
+ 'https://www.googleapis.com/auth/cloud-platform',
+ )
+
+ DEFAULT_HOST: str = 'webrisk.googleapis.com'
+ def __init__(
+ self, *,
+ host: str = DEFAULT_HOST,
+ credentials: ga_credentials.Credentials = None,
+ credentials_file: Optional[str] = None,
+ scopes: Optional[Sequence[str]] = None,
+ quota_project_id: Optional[str] = None,
+ client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
+ always_use_jwt_access: Optional[bool] = False,
+ **kwargs,
+ ) -> None:
+ """Instantiate the transport.
+
+ Args:
+ host (Optional[str]):
+ The hostname to connect to.
+ credentials (Optional[google.auth.credentials.Credentials]): The
+ authorization credentials to attach to requests. These
+ credentials identify the application to the service; if none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ credentials_file (Optional[str]): A file with credentials that can
+ be loaded with :func:`google.auth.load_credentials_from_file`.
+ This argument is mutually exclusive with credentials.
+ scopes (Optional[Sequence[str]]): A list of scopes.
+ quota_project_id (Optional[str]): An optional project to use for billing
+ and quota.
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
+ The client info used to send a user-agent string along with
+ API requests. If ``None``, then default info will be used.
+ Generally, you only need to set this if you're developing
+ your own client library.
+ always_use_jwt_access (Optional[bool]): Whether self signed JWT should
+ be used for service account credentials.
+ """
+ # Save the hostname. Default to port 443 (HTTPS) if none is specified.
+ if ':' not in host:
+ host += ':443'
+ self._host = host
+
+ scopes_kwargs = self._get_scopes_kwargs(self._host, scopes)
+
+ # Save the scopes.
+ self._scopes = scopes
+
+ # If no credentials are provided, then determine the appropriate
+ # defaults.
+ if credentials and credentials_file:
+ raise core_exceptions.DuplicateCredentialArgs("'credentials_file' and 'credentials' are mutually exclusive")
+
+ if credentials_file is not None:
+ credentials, _ = google.auth.load_credentials_from_file(
+ credentials_file,
+ **scopes_kwargs,
+ quota_project_id=quota_project_id
+ )
+
+ elif credentials is None:
+ credentials, _ = google.auth.default(**scopes_kwargs, quota_project_id=quota_project_id)
+
+ # If the credentials is service account credentials, then always try to use self signed JWT.
+ if always_use_jwt_access and isinstance(credentials, service_account.Credentials) and hasattr(service_account.Credentials, "with_always_use_jwt_access"):
+ credentials = credentials.with_always_use_jwt_access(True)
+
+ # Save the credentials.
+ self._credentials = credentials
+
+ # TODO(busunkim): This method is in the base transport
+ # to avoid duplicating code across the transport classes. These functions
+ # should be deleted once the minimum required versions of google-auth is increased.
+
+ # TODO: Remove this function once google-auth >= 1.25.0 is required
+ @classmethod
+ def _get_scopes_kwargs(cls, host: str, scopes: Optional[Sequence[str]]) -> Dict[str, Optional[Sequence[str]]]:
+ """Returns scopes kwargs to pass to google-auth methods depending on the google-auth version"""
+
+ scopes_kwargs = {}
+
+ if _GOOGLE_AUTH_VERSION and (
+ packaging.version.parse(_GOOGLE_AUTH_VERSION)
+ >= packaging.version.parse("1.25.0")
+ ):
+ scopes_kwargs = {"scopes": scopes, "default_scopes": cls.AUTH_SCOPES}
+ else:
+ scopes_kwargs = {"scopes": scopes or cls.AUTH_SCOPES}
+
+ return scopes_kwargs
+
+ def _prep_wrapped_messages(self, client_info):
+ # Precompute the wrapped methods.
+ self._wrapped_methods = {
+ self.compute_threat_list_diff: gapic_v1.method.wrap_method(
+ self.compute_threat_list_diff,
+ default_retry=retries.Retry(
+initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
+ core_exceptions.DeadlineExceeded,
+ core_exceptions.ServiceUnavailable,
+ ),
+ deadline=600.0,
+ ),
+ default_timeout=600.0,
+ client_info=client_info,
+ ),
+ self.search_uris: gapic_v1.method.wrap_method(
+ self.search_uris,
+ default_retry=retries.Retry(
+initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
+ core_exceptions.DeadlineExceeded,
+ core_exceptions.ServiceUnavailable,
+ ),
+ deadline=600.0,
+ ),
+ default_timeout=600.0,
+ client_info=client_info,
+ ),
+ self.search_hashes: gapic_v1.method.wrap_method(
+ self.search_hashes,
+ default_retry=retries.Retry(
+initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
+ core_exceptions.DeadlineExceeded,
+ core_exceptions.ServiceUnavailable,
+ ),
+ deadline=600.0,
+ ),
+ default_timeout=600.0,
+ client_info=client_info,
+ ),
+ self.create_submission: gapic_v1.method.wrap_method(
+ self.create_submission,
+ default_timeout=60.0,
+ client_info=client_info,
+ ),
+ }
+
+ @property
+ def compute_threat_list_diff(self) -> Callable[
+ [webrisk.ComputeThreatListDiffRequest],
+ Union[
+ webrisk.ComputeThreatListDiffResponse,
+ Awaitable[webrisk.ComputeThreatListDiffResponse]
+ ]]:
+ raise NotImplementedError()
+
+ @property
+ def search_uris(self) -> Callable[
+ [webrisk.SearchUrisRequest],
+ Union[
+ webrisk.SearchUrisResponse,
+ Awaitable[webrisk.SearchUrisResponse]
+ ]]:
+ raise NotImplementedError()
+
+ @property
+ def search_hashes(self) -> Callable[
+ [webrisk.SearchHashesRequest],
+ Union[
+ webrisk.SearchHashesResponse,
+ Awaitable[webrisk.SearchHashesResponse]
+ ]]:
+ raise NotImplementedError()
+
+ @property
+ def create_submission(self) -> Callable[
+ [webrisk.CreateSubmissionRequest],
+ Union[
+ webrisk.Submission,
+ Awaitable[webrisk.Submission]
+ ]]:
+ raise NotImplementedError()
+
+
+__all__ = (
+ 'WebRiskServiceTransport',
+)
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc.py b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc.py
new file mode 100644
index 0000000..f6c869e
--- /dev/null
+++ b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc.py
@@ -0,0 +1,355 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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 warnings
+from typing import Callable, Dict, Optional, Sequence, Tuple, Union
+
+from google.api_core import grpc_helpers # type: ignore
+from google.api_core import gapic_v1 # type: ignore
+import google.auth # type: ignore
+from google.auth import credentials as ga_credentials # type: ignore
+from google.auth.transport.grpc import SslCredentials # type: ignore
+
+import grpc # type: ignore
+
+from google.cloud.webrisk_v1.types import webrisk
+from .base import WebRiskServiceTransport, DEFAULT_CLIENT_INFO
+
+
+class WebRiskServiceGrpcTransport(WebRiskServiceTransport):
+ """gRPC backend transport for WebRiskService.
+
+ Web Risk API defines an interface to detect malicious URLs on
+ your website and in client applications.
+
+ This class defines the same methods as the primary client, so the
+ primary client can load the underlying transport implementation
+ and call it.
+
+ It sends protocol buffers over the wire using gRPC (which is built on
+ top of HTTP/2); the ``grpcio`` package must be installed.
+ """
+ _stubs: Dict[str, Callable]
+
+ def __init__(self, *,
+ host: str = 'webrisk.googleapis.com',
+ credentials: ga_credentials.Credentials = None,
+ credentials_file: str = None,
+ scopes: Sequence[str] = None,
+ channel: grpc.Channel = None,
+ api_mtls_endpoint: str = None,
+ client_cert_source: Callable[[], Tuple[bytes, bytes]] = None,
+ ssl_channel_credentials: grpc.ChannelCredentials = None,
+ client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None,
+ quota_project_id: Optional[str] = None,
+ client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
+ always_use_jwt_access: Optional[bool] = False,
+ ) -> None:
+ """Instantiate the transport.
+
+ Args:
+ host (Optional[str]):
+ The hostname to connect to.
+ credentials (Optional[google.auth.credentials.Credentials]): The
+ authorization credentials to attach to requests. These
+ credentials identify the application to the service; if none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ This argument is ignored if ``channel`` is provided.
+ credentials_file (Optional[str]): A file with credentials that can
+ be loaded with :func:`google.auth.load_credentials_from_file`.
+ This argument is ignored if ``channel`` is provided.
+ scopes (Optional(Sequence[str])): A list of scopes. This argument is
+ ignored if ``channel`` is provided.
+ channel (Optional[grpc.Channel]): A ``Channel`` instance through
+ which to make calls.
+ api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint.
+ If provided, it overrides the ``host`` argument and tries to create
+ a mutual TLS channel with client SSL credentials from
+ ``client_cert_source`` or applicatin default SSL credentials.
+ client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]):
+ Deprecated. A callback to provide client SSL certificate bytes and
+ private key bytes, both in PEM format. It is ignored if
+ ``api_mtls_endpoint`` is None.
+ ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials
+ for grpc channel. It is ignored if ``channel`` is provided.
+ client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]):
+ A callback to provide client certificate bytes and private key bytes,
+ both in PEM format. It is used to configure mutual TLS channel. It is
+ ignored if ``channel`` or ``ssl_channel_credentials`` is provided.
+ quota_project_id (Optional[str]): An optional project to use for billing
+ and quota.
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
+ The client info used to send a user-agent string along with
+ API requests. If ``None``, then default info will be used.
+ Generally, you only need to set this if you're developing
+ your own client library.
+ always_use_jwt_access (Optional[bool]): Whether self signed JWT should
+ be used for service account credentials.
+
+ Raises:
+ google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport
+ creation failed for any reason.
+ google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials``
+ and ``credentials_file`` are passed.
+ """
+ self._grpc_channel = None
+ self._ssl_channel_credentials = ssl_channel_credentials
+ self._stubs: Dict[str, Callable] = {}
+
+ if api_mtls_endpoint:
+ warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning)
+ if client_cert_source:
+ warnings.warn("client_cert_source is deprecated", DeprecationWarning)
+
+ if channel:
+ # Ignore credentials if a channel was passed.
+ credentials = False
+ # If a channel was explicitly provided, set it.
+ self._grpc_channel = channel
+ self._ssl_channel_credentials = None
+
+ else:
+ if api_mtls_endpoint:
+ host = api_mtls_endpoint
+
+ # Create SSL credentials with client_cert_source or application
+ # default SSL credentials.
+ if client_cert_source:
+ cert, key = client_cert_source()
+ self._ssl_channel_credentials = grpc.ssl_channel_credentials(
+ certificate_chain=cert, private_key=key
+ )
+ else:
+ self._ssl_channel_credentials = SslCredentials().ssl_credentials
+
+ else:
+ if client_cert_source_for_mtls and not ssl_channel_credentials:
+ cert, key = client_cert_source_for_mtls()
+ self._ssl_channel_credentials = grpc.ssl_channel_credentials(
+ certificate_chain=cert, private_key=key
+ )
+
+ # The base transport sets the host, credentials and scopes
+ super().__init__(
+ host=host,
+ credentials=credentials,
+ credentials_file=credentials_file,
+ scopes=scopes,
+ quota_project_id=quota_project_id,
+ client_info=client_info,
+ always_use_jwt_access=always_use_jwt_access,
+ )
+
+ if not self._grpc_channel:
+ self._grpc_channel = type(self).create_channel(
+ self._host,
+ credentials=self._credentials,
+ credentials_file=credentials_file,
+ scopes=self._scopes,
+ ssl_credentials=self._ssl_channel_credentials,
+ quota_project_id=quota_project_id,
+ options=[
+ ("grpc.max_send_message_length", -1),
+ ("grpc.max_receive_message_length", -1),
+ ],
+ )
+
+ # Wrap messages. This must be done after self._grpc_channel exists
+ self._prep_wrapped_messages(client_info)
+
+ @classmethod
+ def create_channel(cls,
+ host: str = 'webrisk.googleapis.com',
+ credentials: ga_credentials.Credentials = None,
+ credentials_file: str = None,
+ scopes: Optional[Sequence[str]] = None,
+ quota_project_id: Optional[str] = None,
+ **kwargs) -> grpc.Channel:
+ """Create and return a gRPC channel object.
+ Args:
+ host (Optional[str]): The host for the channel to use.
+ credentials (Optional[~.Credentials]): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If
+ none are specified, the client will attempt to ascertain
+ the credentials from the environment.
+ credentials_file (Optional[str]): A file with credentials that can
+ be loaded with :func:`google.auth.load_credentials_from_file`.
+ This argument is mutually exclusive with credentials.
+ scopes (Optional[Sequence[str]]): A optional list of scopes needed for this
+ service. These are only used when credentials are not specified and
+ are passed to :func:`google.auth.default`.
+ quota_project_id (Optional[str]): An optional project to use for billing
+ and quota.
+ kwargs (Optional[dict]): Keyword arguments, which are passed to the
+ channel creation.
+ Returns:
+ grpc.Channel: A gRPC channel object.
+
+ Raises:
+ google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials``
+ and ``credentials_file`` are passed.
+ """
+
+ return grpc_helpers.create_channel(
+ host,
+ credentials=credentials,
+ credentials_file=credentials_file,
+ quota_project_id=quota_project_id,
+ default_scopes=cls.AUTH_SCOPES,
+ scopes=scopes,
+ default_host=cls.DEFAULT_HOST,
+ **kwargs
+ )
+
+ @property
+ def grpc_channel(self) -> grpc.Channel:
+ """Return the channel designed to connect to this service.
+ """
+ return self._grpc_channel
+
+ @property
+ def compute_threat_list_diff(self) -> Callable[
+ [webrisk.ComputeThreatListDiffRequest],
+ webrisk.ComputeThreatListDiffResponse]:
+ r"""Return a callable for the compute threat list diff method over gRPC.
+
+ Gets the most recent threat list diffs. These diffs
+ should be applied to a local database of hashes to keep
+ it up-to-date. If the local database is empty or
+ excessively out-of-date, a complete snapshot of the
+ database will be returned. This Method only updates a
+ single ThreatList at a time. To update multiple
+ ThreatList databases, this method needs to be called
+ once for each list.
+
+ Returns:
+ Callable[[~.ComputeThreatListDiffRequest],
+ ~.ComputeThreatListDiffResponse]:
+ A function that, when called, will call the underlying RPC
+ on the server.
+ """
+ # Generate a "stub function" on-the-fly which will actually make
+ # the request.
+ # gRPC handles serialization and deserialization, so we just need
+ # to pass in the functions for each.
+ if 'compute_threat_list_diff' not in self._stubs:
+ self._stubs['compute_threat_list_diff'] = self.grpc_channel.unary_unary(
+ '/google.cloud.webrisk.v1.WebRiskService/ComputeThreatListDiff',
+ request_serializer=webrisk.ComputeThreatListDiffRequest.serialize,
+ response_deserializer=webrisk.ComputeThreatListDiffResponse.deserialize,
+ )
+ return self._stubs['compute_threat_list_diff']
+
+ @property
+ def search_uris(self) -> Callable[
+ [webrisk.SearchUrisRequest],
+ webrisk.SearchUrisResponse]:
+ r"""Return a callable for the search uris method over gRPC.
+
+ This method is used to check whether a URI is on a
+ given threatList. Multiple threatLists may be searched
+ in a single query. The response will list all requested
+ threatLists the URI was found to match. If the URI is
+ not found on any of the requested ThreatList an empty
+ response will be returned.
+
+ Returns:
+ Callable[[~.SearchUrisRequest],
+ ~.SearchUrisResponse]:
+ A function that, when called, will call the underlying RPC
+ on the server.
+ """
+ # Generate a "stub function" on-the-fly which will actually make
+ # the request.
+ # gRPC handles serialization and deserialization, so we just need
+ # to pass in the functions for each.
+ if 'search_uris' not in self._stubs:
+ self._stubs['search_uris'] = self.grpc_channel.unary_unary(
+ '/google.cloud.webrisk.v1.WebRiskService/SearchUris',
+ request_serializer=webrisk.SearchUrisRequest.serialize,
+ response_deserializer=webrisk.SearchUrisResponse.deserialize,
+ )
+ return self._stubs['search_uris']
+
+ @property
+ def search_hashes(self) -> Callable[
+ [webrisk.SearchHashesRequest],
+ webrisk.SearchHashesResponse]:
+ r"""Return a callable for the search hashes method over gRPC.
+
+ Gets the full hashes that match the requested hash
+ prefix. This is used after a hash prefix is looked up in
+ a threatList and there is a match. The client side
+ threatList only holds partial hashes so the client must
+ query this method to determine if there is a full hash
+ match of a threat.
+
+ Returns:
+ Callable[[~.SearchHashesRequest],
+ ~.SearchHashesResponse]:
+ A function that, when called, will call the underlying RPC
+ on the server.
+ """
+ # Generate a "stub function" on-the-fly which will actually make
+ # the request.
+ # gRPC handles serialization and deserialization, so we just need
+ # to pass in the functions for each.
+ if 'search_hashes' not in self._stubs:
+ self._stubs['search_hashes'] = self.grpc_channel.unary_unary(
+ '/google.cloud.webrisk.v1.WebRiskService/SearchHashes',
+ request_serializer=webrisk.SearchHashesRequest.serialize,
+ response_deserializer=webrisk.SearchHashesResponse.deserialize,
+ )
+ return self._stubs['search_hashes']
+
+ @property
+ def create_submission(self) -> Callable[
+ [webrisk.CreateSubmissionRequest],
+ webrisk.Submission]:
+ r"""Return a callable for the create submission method over gRPC.
+
+ Creates a Submission of a URI suspected of containing phishing
+ content to be reviewed. If the result verifies the existence of
+ malicious phishing content, the site will be added to the
+ `Google's Social Engineering
+ lists `__
+ in order to protect users that could get exposed to this threat
+ in the future. Only projects with CREATE_SUBMISSION_USERS
+ visibility can use this method.
+
+ Returns:
+ Callable[[~.CreateSubmissionRequest],
+ ~.Submission]:
+ A function that, when called, will call the underlying RPC
+ on the server.
+ """
+ # Generate a "stub function" on-the-fly which will actually make
+ # the request.
+ # gRPC handles serialization and deserialization, so we just need
+ # to pass in the functions for each.
+ if 'create_submission' not in self._stubs:
+ self._stubs['create_submission'] = self.grpc_channel.unary_unary(
+ '/google.cloud.webrisk.v1.WebRiskService/CreateSubmission',
+ request_serializer=webrisk.CreateSubmissionRequest.serialize,
+ response_deserializer=webrisk.Submission.deserialize,
+ )
+ return self._stubs['create_submission']
+
+
+__all__ = (
+ 'WebRiskServiceGrpcTransport',
+)
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc_asyncio.py b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc_asyncio.py
new file mode 100644
index 0000000..b90914a
--- /dev/null
+++ b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc_asyncio.py
@@ -0,0 +1,359 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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 warnings
+from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union
+
+from google.api_core import gapic_v1 # type: ignore
+from google.api_core import grpc_helpers_async # type: ignore
+from google.auth import credentials as ga_credentials # type: ignore
+from google.auth.transport.grpc import SslCredentials # type: ignore
+import packaging.version
+
+import grpc # type: ignore
+from grpc.experimental import aio # type: ignore
+
+from google.cloud.webrisk_v1.types import webrisk
+from .base import WebRiskServiceTransport, DEFAULT_CLIENT_INFO
+from .grpc import WebRiskServiceGrpcTransport
+
+
+class WebRiskServiceGrpcAsyncIOTransport(WebRiskServiceTransport):
+ """gRPC AsyncIO backend transport for WebRiskService.
+
+ Web Risk API defines an interface to detect malicious URLs on
+ your website and in client applications.
+
+ This class defines the same methods as the primary client, so the
+ primary client can load the underlying transport implementation
+ and call it.
+
+ It sends protocol buffers over the wire using gRPC (which is built on
+ top of HTTP/2); the ``grpcio`` package must be installed.
+ """
+
+ _grpc_channel: aio.Channel
+ _stubs: Dict[str, Callable] = {}
+
+ @classmethod
+ def create_channel(cls,
+ host: str = 'webrisk.googleapis.com',
+ credentials: ga_credentials.Credentials = None,
+ credentials_file: Optional[str] = None,
+ scopes: Optional[Sequence[str]] = None,
+ quota_project_id: Optional[str] = None,
+ **kwargs) -> aio.Channel:
+ """Create and return a gRPC AsyncIO channel object.
+ Args:
+ host (Optional[str]): The host for the channel to use.
+ credentials (Optional[~.Credentials]): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If
+ none are specified, the client will attempt to ascertain
+ the credentials from the environment.
+ credentials_file (Optional[str]): A file with credentials that can
+ be loaded with :func:`google.auth.load_credentials_from_file`.
+ This argument is ignored if ``channel`` is provided.
+ scopes (Optional[Sequence[str]]): A optional list of scopes needed for this
+ service. These are only used when credentials are not specified and
+ are passed to :func:`google.auth.default`.
+ quota_project_id (Optional[str]): An optional project to use for billing
+ and quota.
+ kwargs (Optional[dict]): Keyword arguments, which are passed to the
+ channel creation.
+ Returns:
+ aio.Channel: A gRPC AsyncIO channel object.
+ """
+
+ return grpc_helpers_async.create_channel(
+ host,
+ credentials=credentials,
+ credentials_file=credentials_file,
+ quota_project_id=quota_project_id,
+ default_scopes=cls.AUTH_SCOPES,
+ scopes=scopes,
+ default_host=cls.DEFAULT_HOST,
+ **kwargs
+ )
+
+ def __init__(self, *,
+ host: str = 'webrisk.googleapis.com',
+ credentials: ga_credentials.Credentials = None,
+ credentials_file: Optional[str] = None,
+ scopes: Optional[Sequence[str]] = None,
+ channel: aio.Channel = None,
+ api_mtls_endpoint: str = None,
+ client_cert_source: Callable[[], Tuple[bytes, bytes]] = None,
+ ssl_channel_credentials: grpc.ChannelCredentials = None,
+ client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None,
+ quota_project_id=None,
+ client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
+ always_use_jwt_access: Optional[bool] = False,
+ ) -> None:
+ """Instantiate the transport.
+
+ Args:
+ host (Optional[str]):
+ The hostname to connect to.
+ credentials (Optional[google.auth.credentials.Credentials]): The
+ authorization credentials to attach to requests. These
+ credentials identify the application to the service; if none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ This argument is ignored if ``channel`` is provided.
+ credentials_file (Optional[str]): A file with credentials that can
+ be loaded with :func:`google.auth.load_credentials_from_file`.
+ This argument is ignored if ``channel`` is provided.
+ scopes (Optional[Sequence[str]]): A optional list of scopes needed for this
+ service. These are only used when credentials are not specified and
+ are passed to :func:`google.auth.default`.
+ channel (Optional[aio.Channel]): A ``Channel`` instance through
+ which to make calls.
+ api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint.
+ If provided, it overrides the ``host`` argument and tries to create
+ a mutual TLS channel with client SSL credentials from
+ ``client_cert_source`` or applicatin default SSL credentials.
+ client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]):
+ Deprecated. A callback to provide client SSL certificate bytes and
+ private key bytes, both in PEM format. It is ignored if
+ ``api_mtls_endpoint`` is None.
+ ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials
+ for grpc channel. It is ignored if ``channel`` is provided.
+ client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]):
+ A callback to provide client certificate bytes and private key bytes,
+ both in PEM format. It is used to configure mutual TLS channel. It is
+ ignored if ``channel`` or ``ssl_channel_credentials`` is provided.
+ quota_project_id (Optional[str]): An optional project to use for billing
+ and quota.
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
+ The client info used to send a user-agent string along with
+ API requests. If ``None``, then default info will be used.
+ Generally, you only need to set this if you're developing
+ your own client library.
+ always_use_jwt_access (Optional[bool]): Whether self signed JWT should
+ be used for service account credentials.
+
+ Raises:
+ google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport
+ creation failed for any reason.
+ google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials``
+ and ``credentials_file`` are passed.
+ """
+ self._grpc_channel = None
+ self._ssl_channel_credentials = ssl_channel_credentials
+ self._stubs: Dict[str, Callable] = {}
+
+ if api_mtls_endpoint:
+ warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning)
+ if client_cert_source:
+ warnings.warn("client_cert_source is deprecated", DeprecationWarning)
+
+ if channel:
+ # Ignore credentials if a channel was passed.
+ credentials = False
+ # If a channel was explicitly provided, set it.
+ self._grpc_channel = channel
+ self._ssl_channel_credentials = None
+ else:
+ if api_mtls_endpoint:
+ host = api_mtls_endpoint
+
+ # Create SSL credentials with client_cert_source or application
+ # default SSL credentials.
+ if client_cert_source:
+ cert, key = client_cert_source()
+ self._ssl_channel_credentials = grpc.ssl_channel_credentials(
+ certificate_chain=cert, private_key=key
+ )
+ else:
+ self._ssl_channel_credentials = SslCredentials().ssl_credentials
+
+ else:
+ if client_cert_source_for_mtls and not ssl_channel_credentials:
+ cert, key = client_cert_source_for_mtls()
+ self._ssl_channel_credentials = grpc.ssl_channel_credentials(
+ certificate_chain=cert, private_key=key
+ )
+
+ # The base transport sets the host, credentials and scopes
+ super().__init__(
+ host=host,
+ credentials=credentials,
+ credentials_file=credentials_file,
+ scopes=scopes,
+ quota_project_id=quota_project_id,
+ client_info=client_info,
+ always_use_jwt_access=always_use_jwt_access,
+ )
+
+ if not self._grpc_channel:
+ self._grpc_channel = type(self).create_channel(
+ self._host,
+ credentials=self._credentials,
+ credentials_file=credentials_file,
+ scopes=self._scopes,
+ ssl_credentials=self._ssl_channel_credentials,
+ quota_project_id=quota_project_id,
+ options=[
+ ("grpc.max_send_message_length", -1),
+ ("grpc.max_receive_message_length", -1),
+ ],
+ )
+
+ # Wrap messages. This must be done after self._grpc_channel exists
+ self._prep_wrapped_messages(client_info)
+
+ @property
+ def grpc_channel(self) -> aio.Channel:
+ """Create the channel designed to connect to this service.
+
+ This property caches on the instance; repeated calls return
+ the same channel.
+ """
+ # Return the channel from cache.
+ return self._grpc_channel
+
+ @property
+ def compute_threat_list_diff(self) -> Callable[
+ [webrisk.ComputeThreatListDiffRequest],
+ Awaitable[webrisk.ComputeThreatListDiffResponse]]:
+ r"""Return a callable for the compute threat list diff method over gRPC.
+
+ Gets the most recent threat list diffs. These diffs
+ should be applied to a local database of hashes to keep
+ it up-to-date. If the local database is empty or
+ excessively out-of-date, a complete snapshot of the
+ database will be returned. This Method only updates a
+ single ThreatList at a time. To update multiple
+ ThreatList databases, this method needs to be called
+ once for each list.
+
+ Returns:
+ Callable[[~.ComputeThreatListDiffRequest],
+ Awaitable[~.ComputeThreatListDiffResponse]]:
+ A function that, when called, will call the underlying RPC
+ on the server.
+ """
+ # Generate a "stub function" on-the-fly which will actually make
+ # the request.
+ # gRPC handles serialization and deserialization, so we just need
+ # to pass in the functions for each.
+ if 'compute_threat_list_diff' not in self._stubs:
+ self._stubs['compute_threat_list_diff'] = self.grpc_channel.unary_unary(
+ '/google.cloud.webrisk.v1.WebRiskService/ComputeThreatListDiff',
+ request_serializer=webrisk.ComputeThreatListDiffRequest.serialize,
+ response_deserializer=webrisk.ComputeThreatListDiffResponse.deserialize,
+ )
+ return self._stubs['compute_threat_list_diff']
+
+ @property
+ def search_uris(self) -> Callable[
+ [webrisk.SearchUrisRequest],
+ Awaitable[webrisk.SearchUrisResponse]]:
+ r"""Return a callable for the search uris method over gRPC.
+
+ This method is used to check whether a URI is on a
+ given threatList. Multiple threatLists may be searched
+ in a single query. The response will list all requested
+ threatLists the URI was found to match. If the URI is
+ not found on any of the requested ThreatList an empty
+ response will be returned.
+
+ Returns:
+ Callable[[~.SearchUrisRequest],
+ Awaitable[~.SearchUrisResponse]]:
+ A function that, when called, will call the underlying RPC
+ on the server.
+ """
+ # Generate a "stub function" on-the-fly which will actually make
+ # the request.
+ # gRPC handles serialization and deserialization, so we just need
+ # to pass in the functions for each.
+ if 'search_uris' not in self._stubs:
+ self._stubs['search_uris'] = self.grpc_channel.unary_unary(
+ '/google.cloud.webrisk.v1.WebRiskService/SearchUris',
+ request_serializer=webrisk.SearchUrisRequest.serialize,
+ response_deserializer=webrisk.SearchUrisResponse.deserialize,
+ )
+ return self._stubs['search_uris']
+
+ @property
+ def search_hashes(self) -> Callable[
+ [webrisk.SearchHashesRequest],
+ Awaitable[webrisk.SearchHashesResponse]]:
+ r"""Return a callable for the search hashes method over gRPC.
+
+ Gets the full hashes that match the requested hash
+ prefix. This is used after a hash prefix is looked up in
+ a threatList and there is a match. The client side
+ threatList only holds partial hashes so the client must
+ query this method to determine if there is a full hash
+ match of a threat.
+
+ Returns:
+ Callable[[~.SearchHashesRequest],
+ Awaitable[~.SearchHashesResponse]]:
+ A function that, when called, will call the underlying RPC
+ on the server.
+ """
+ # Generate a "stub function" on-the-fly which will actually make
+ # the request.
+ # gRPC handles serialization and deserialization, so we just need
+ # to pass in the functions for each.
+ if 'search_hashes' not in self._stubs:
+ self._stubs['search_hashes'] = self.grpc_channel.unary_unary(
+ '/google.cloud.webrisk.v1.WebRiskService/SearchHashes',
+ request_serializer=webrisk.SearchHashesRequest.serialize,
+ response_deserializer=webrisk.SearchHashesResponse.deserialize,
+ )
+ return self._stubs['search_hashes']
+
+ @property
+ def create_submission(self) -> Callable[
+ [webrisk.CreateSubmissionRequest],
+ Awaitable[webrisk.Submission]]:
+ r"""Return a callable for the create submission method over gRPC.
+
+ Creates a Submission of a URI suspected of containing phishing
+ content to be reviewed. If the result verifies the existence of
+ malicious phishing content, the site will be added to the
+ `Google's Social Engineering
+ lists `__
+ in order to protect users that could get exposed to this threat
+ in the future. Only projects with CREATE_SUBMISSION_USERS
+ visibility can use this method.
+
+ Returns:
+ Callable[[~.CreateSubmissionRequest],
+ Awaitable[~.Submission]]:
+ A function that, when called, will call the underlying RPC
+ on the server.
+ """
+ # Generate a "stub function" on-the-fly which will actually make
+ # the request.
+ # gRPC handles serialization and deserialization, so we just need
+ # to pass in the functions for each.
+ if 'create_submission' not in self._stubs:
+ self._stubs['create_submission'] = self.grpc_channel.unary_unary(
+ '/google.cloud.webrisk.v1.WebRiskService/CreateSubmission',
+ request_serializer=webrisk.CreateSubmissionRequest.serialize,
+ response_deserializer=webrisk.Submission.deserialize,
+ )
+ return self._stubs['create_submission']
+
+
+__all__ = (
+ 'WebRiskServiceGrpcAsyncIOTransport',
+)
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/types/__init__.py b/owl-bot-staging/v1/google/cloud/webrisk_v1/types/__init__.py
new file mode 100644
index 0000000..66a7219
--- /dev/null
+++ b/owl-bot-staging/v1/google/cloud/webrisk_v1/types/__init__.py
@@ -0,0 +1,50 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+from .webrisk import (
+ ComputeThreatListDiffRequest,
+ ComputeThreatListDiffResponse,
+ CreateSubmissionRequest,
+ RawHashes,
+ RawIndices,
+ RiceDeltaEncoding,
+ SearchHashesRequest,
+ SearchHashesResponse,
+ SearchUrisRequest,
+ SearchUrisResponse,
+ Submission,
+ ThreatEntryAdditions,
+ ThreatEntryRemovals,
+ CompressionType,
+ ThreatType,
+)
+
+__all__ = (
+ 'ComputeThreatListDiffRequest',
+ 'ComputeThreatListDiffResponse',
+ 'CreateSubmissionRequest',
+ 'RawHashes',
+ 'RawIndices',
+ 'RiceDeltaEncoding',
+ 'SearchHashesRequest',
+ 'SearchHashesResponse',
+ 'SearchUrisRequest',
+ 'SearchUrisResponse',
+ 'Submission',
+ 'ThreatEntryAdditions',
+ 'ThreatEntryRemovals',
+ 'CompressionType',
+ 'ThreatType',
+)
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/types/webrisk.py b/owl-bot-staging/v1/google/cloud/webrisk_v1/types/webrisk.py
new file mode 100644
index 0000000..61b2657
--- /dev/null
+++ b/owl-bot-staging/v1/google/cloud/webrisk_v1/types/webrisk.py
@@ -0,0 +1,529 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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 proto # type: ignore
+
+from google.protobuf import timestamp_pb2 # type: ignore
+
+
+__protobuf__ = proto.module(
+ package='google.cloud.webrisk.v1',
+ manifest={
+ 'ThreatType',
+ 'CompressionType',
+ 'ComputeThreatListDiffRequest',
+ 'ComputeThreatListDiffResponse',
+ 'SearchUrisRequest',
+ 'SearchUrisResponse',
+ 'SearchHashesRequest',
+ 'SearchHashesResponse',
+ 'ThreatEntryAdditions',
+ 'ThreatEntryRemovals',
+ 'RawIndices',
+ 'RawHashes',
+ 'RiceDeltaEncoding',
+ 'Submission',
+ 'CreateSubmissionRequest',
+ },
+)
+
+
+class ThreatType(proto.Enum):
+ r"""The type of threat. This maps dirrectly to the threat list a
+ threat may belong to.
+ """
+ THREAT_TYPE_UNSPECIFIED = 0
+ MALWARE = 1
+ SOCIAL_ENGINEERING = 2
+ UNWANTED_SOFTWARE = 3
+
+
+class CompressionType(proto.Enum):
+ r"""The ways in which threat entry sets can be compressed."""
+ COMPRESSION_TYPE_UNSPECIFIED = 0
+ RAW = 1
+ RICE = 2
+
+
+class ComputeThreatListDiffRequest(proto.Message):
+ r"""Describes an API diff request.
+ Attributes:
+ threat_type (google.cloud.webrisk_v1.types.ThreatType):
+ Required. The threat list to update. Only a
+ single ThreatType should be specified.
+ version_token (bytes):
+ The current version token of the client for
+ the requested list (the client version that was
+ received from the last successful diff). If the
+ client does not have a version token (this is
+ the first time calling ComputeThreatListDiff),
+ this may be left empty and a full database
+ snapshot will be returned.
+ constraints (google.cloud.webrisk_v1.types.ComputeThreatListDiffRequest.Constraints):
+ Required. The constraints associated with
+ this request.
+ """
+
+ class Constraints(proto.Message):
+ r"""The constraints for this diff.
+ Attributes:
+ max_diff_entries (int):
+ The maximum size in number of entries. The diff will not
+ contain more entries than this value. This should be a power
+ of 2 between 2\ **10 and 2**\ 20. If zero, no diff size
+ limit is set.
+ max_database_entries (int):
+ Sets the maximum number of entries that the client is
+ willing to have in the local database. This should be a
+ power of 2 between 2\ **10 and 2**\ 20. If zero, no database
+ size limit is set.
+ supported_compressions (Sequence[google.cloud.webrisk_v1.types.CompressionType]):
+ The compression types supported by the
+ client.
+ """
+
+ max_diff_entries = proto.Field(
+ proto.INT32,
+ number=1,
+ )
+ max_database_entries = proto.Field(
+ proto.INT32,
+ number=2,
+ )
+ supported_compressions = proto.RepeatedField(
+ proto.ENUM,
+ number=3,
+ enum='CompressionType',
+ )
+
+ threat_type = proto.Field(
+ proto.ENUM,
+ number=1,
+ enum='ThreatType',
+ )
+ version_token = proto.Field(
+ proto.BYTES,
+ number=2,
+ )
+ constraints = proto.Field(
+ proto.MESSAGE,
+ number=3,
+ message=Constraints,
+ )
+
+
+class ComputeThreatListDiffResponse(proto.Message):
+ r"""
+ Attributes:
+ response_type (google.cloud.webrisk_v1.types.ComputeThreatListDiffResponse.ResponseType):
+ The type of response. This may indicate that
+ an action must be taken by the client when the
+ response is received.
+ additions (google.cloud.webrisk_v1.types.ThreatEntryAdditions):
+ A set of entries to add to a local threat
+ type's list.
+ removals (google.cloud.webrisk_v1.types.ThreatEntryRemovals):
+ A set of entries to remove from a local
+ threat type's list. This field may be empty.
+ new_version_token (bytes):
+ The new opaque client version token. This should be retained
+ by the client and passed into the next call of
+ ComputeThreatListDiff as 'version_token'. A separate version
+ token should be stored and used for each threatList.
+ checksum (google.cloud.webrisk_v1.types.ComputeThreatListDiffResponse.Checksum):
+ The expected SHA256 hash of the client state;
+ that is, of the sorted list of all hashes
+ present in the database after applying the
+ provided diff. If the client state doesn't match
+ the expected state, the client must discard this
+ diff and retry later.
+ recommended_next_diff (google.protobuf.timestamp_pb2.Timestamp):
+ The soonest the client should wait before
+ issuing any diff request. Querying sooner is
+ unlikely to produce a meaningful diff. Waiting
+ longer is acceptable considering the use case.
+ If this field is not set clients may update as
+ soon as they want.
+ """
+ class ResponseType(proto.Enum):
+ r"""The type of response sent to the client."""
+ RESPONSE_TYPE_UNSPECIFIED = 0
+ DIFF = 1
+ RESET = 2
+
+ class Checksum(proto.Message):
+ r"""The expected state of a client's local database.
+ Attributes:
+ sha256 (bytes):
+ The SHA256 hash of the client state; that is,
+ of the sorted list of all hashes present in the
+ database.
+ """
+
+ sha256 = proto.Field(
+ proto.BYTES,
+ number=1,
+ )
+
+ response_type = proto.Field(
+ proto.ENUM,
+ number=4,
+ enum=ResponseType,
+ )
+ additions = proto.Field(
+ proto.MESSAGE,
+ number=5,
+ message='ThreatEntryAdditions',
+ )
+ removals = proto.Field(
+ proto.MESSAGE,
+ number=6,
+ message='ThreatEntryRemovals',
+ )
+ new_version_token = proto.Field(
+ proto.BYTES,
+ number=7,
+ )
+ checksum = proto.Field(
+ proto.MESSAGE,
+ number=8,
+ message=Checksum,
+ )
+ recommended_next_diff = proto.Field(
+ proto.MESSAGE,
+ number=2,
+ message=timestamp_pb2.Timestamp,
+ )
+
+
+class SearchUrisRequest(proto.Message):
+ r"""Request to check URI entries against threatLists.
+ Attributes:
+ uri (str):
+ Required. The URI to be checked for matches.
+ threat_types (Sequence[google.cloud.webrisk_v1.types.ThreatType]):
+ Required. The ThreatLists to search in.
+ Multiple ThreatLists may be specified.
+ """
+
+ uri = proto.Field(
+ proto.STRING,
+ number=1,
+ )
+ threat_types = proto.RepeatedField(
+ proto.ENUM,
+ number=2,
+ enum='ThreatType',
+ )
+
+
+class SearchUrisResponse(proto.Message):
+ r"""
+ Attributes:
+ threat (google.cloud.webrisk_v1.types.SearchUrisResponse.ThreatUri):
+ The threat list matches. This may be empty if
+ the URI is on no list.
+ """
+
+ class ThreatUri(proto.Message):
+ r"""Contains threat information on a matching uri.
+ Attributes:
+ threat_types (Sequence[google.cloud.webrisk_v1.types.ThreatType]):
+ The ThreatList this threat belongs to.
+ expire_time (google.protobuf.timestamp_pb2.Timestamp):
+ The cache lifetime for the returned match.
+ Clients must not cache this response past this
+ timestamp to avoid false positives.
+ """
+
+ threat_types = proto.RepeatedField(
+ proto.ENUM,
+ number=1,
+ enum='ThreatType',
+ )
+ expire_time = proto.Field(
+ proto.MESSAGE,
+ number=2,
+ message=timestamp_pb2.Timestamp,
+ )
+
+ threat = proto.Field(
+ proto.MESSAGE,
+ number=1,
+ message=ThreatUri,
+ )
+
+
+class SearchHashesRequest(proto.Message):
+ r"""Request to return full hashes matched by the provided hash
+ prefixes.
+
+ Attributes:
+ hash_prefix (bytes):
+ A hash prefix, consisting of the most
+ significant 4-32 bytes of a SHA256 hash. For
+ JSON requests, this field is base64-encoded.
+ threat_types (Sequence[google.cloud.webrisk_v1.types.ThreatType]):
+ Required. The ThreatLists to search in.
+ Multiple ThreatLists may be specified.
+ """
+
+ hash_prefix = proto.Field(
+ proto.BYTES,
+ number=1,
+ )
+ threat_types = proto.RepeatedField(
+ proto.ENUM,
+ number=2,
+ enum='ThreatType',
+ )
+
+
+class SearchHashesResponse(proto.Message):
+ r"""
+ Attributes:
+ threats (Sequence[google.cloud.webrisk_v1.types.SearchHashesResponse.ThreatHash]):
+ The full hashes that matched the requested
+ prefixes. The hash will be populated in the key.
+ negative_expire_time (google.protobuf.timestamp_pb2.Timestamp):
+ For requested entities that did not match the
+ threat list, how long to cache the response
+ until.
+ """
+
+ class ThreatHash(proto.Message):
+ r"""Contains threat information on a matching hash.
+ Attributes:
+ threat_types (Sequence[google.cloud.webrisk_v1.types.ThreatType]):
+ The ThreatList this threat belongs to.
+ This must contain at least one entry.
+ hash_ (bytes):
+ A 32 byte SHA256 hash. This field is in
+ binary format. For JSON requests, hashes are
+ base64-encoded.
+ expire_time (google.protobuf.timestamp_pb2.Timestamp):
+ The cache lifetime for the returned match.
+ Clients must not cache this response past this
+ timestamp to avoid false positives.
+ """
+
+ threat_types = proto.RepeatedField(
+ proto.ENUM,
+ number=1,
+ enum='ThreatType',
+ )
+ hash_ = proto.Field(
+ proto.BYTES,
+ number=2,
+ )
+ expire_time = proto.Field(
+ proto.MESSAGE,
+ number=3,
+ message=timestamp_pb2.Timestamp,
+ )
+
+ threats = proto.RepeatedField(
+ proto.MESSAGE,
+ number=1,
+ message=ThreatHash,
+ )
+ negative_expire_time = proto.Field(
+ proto.MESSAGE,
+ number=2,
+ message=timestamp_pb2.Timestamp,
+ )
+
+
+class ThreatEntryAdditions(proto.Message):
+ r"""Contains the set of entries to add to a local database.
+ May contain a combination of compressed and raw data in a single
+ response.
+
+ Attributes:
+ raw_hashes (Sequence[google.cloud.webrisk_v1.types.RawHashes]):
+ The raw SHA256-formatted entries.
+ Repeated to allow returning sets of hashes with
+ different prefix sizes.
+ rice_hashes (google.cloud.webrisk_v1.types.RiceDeltaEncoding):
+ The encoded 4-byte prefixes of SHA256-formatted entries,
+ using a Golomb-Rice encoding. The hashes are converted to
+ uint32, sorted in ascending order, then delta encoded and
+ stored as encoded_data.
+ """
+
+ raw_hashes = proto.RepeatedField(
+ proto.MESSAGE,
+ number=1,
+ message='RawHashes',
+ )
+ rice_hashes = proto.Field(
+ proto.MESSAGE,
+ number=2,
+ message='RiceDeltaEncoding',
+ )
+
+
+class ThreatEntryRemovals(proto.Message):
+ r"""Contains the set of entries to remove from a local database.
+ Attributes:
+ raw_indices (google.cloud.webrisk_v1.types.RawIndices):
+ The raw removal indices for a local list.
+ rice_indices (google.cloud.webrisk_v1.types.RiceDeltaEncoding):
+ The encoded local, lexicographically-sorted list indices,
+ using a Golomb-Rice encoding. Used for sending compressed
+ removal indices. The removal indices (uint32) are sorted in
+ ascending order, then delta encoded and stored as
+ encoded_data.
+ """
+
+ raw_indices = proto.Field(
+ proto.MESSAGE,
+ number=1,
+ message='RawIndices',
+ )
+ rice_indices = proto.Field(
+ proto.MESSAGE,
+ number=2,
+ message='RiceDeltaEncoding',
+ )
+
+
+class RawIndices(proto.Message):
+ r"""A set of raw indices to remove from a local list.
+ Attributes:
+ indices (Sequence[int]):
+ The indices to remove from a
+ lexicographically-sorted local list.
+ """
+
+ indices = proto.RepeatedField(
+ proto.INT32,
+ number=1,
+ )
+
+
+class RawHashes(proto.Message):
+ r"""The uncompressed threat entries in hash format.
+ Hashes can be anywhere from 4 to 32 bytes in size. A large
+ majority are 4 bytes, but some hashes are lengthened if they
+ collide with the hash of a popular URI.
+
+ Used for sending ThreatEntryAdditons to clients that do not
+ support compression, or when sending non-4-byte hashes to
+ clients that do support compression.
+
+ Attributes:
+ prefix_size (int):
+ The number of bytes for each prefix encoded
+ below. This field can be anywhere from 4
+ (shortest prefix) to 32 (full SHA256 hash). In
+ practice this is almost always 4, except in
+ exceptional circumstances.
+ raw_hashes (bytes):
+ The hashes, in binary format, concatenated
+ into one long string. Hashes are sorted in
+ lexicographic order. For JSON API users, hashes
+ are base64-encoded.
+ """
+
+ prefix_size = proto.Field(
+ proto.INT32,
+ number=1,
+ )
+ raw_hashes = proto.Field(
+ proto.BYTES,
+ number=2,
+ )
+
+
+class RiceDeltaEncoding(proto.Message):
+ r"""The Rice-Golomb encoded data. Used for sending compressed
+ 4-byte hashes or compressed removal indices.
+
+ Attributes:
+ first_value (int):
+ The offset of the first entry in the encoded
+ data, or, if only a single integer was encoded,
+ that single integer's value. If the field is
+ empty or missing, assume zero.
+ rice_parameter (int):
+ The Golomb-Rice parameter, which is a number between 2 and
+ 28. This field is missing (that is, zero) if ``num_entries``
+ is zero.
+ entry_count (int):
+ The number of entries that are delta encoded in the encoded
+ data. If only a single integer was encoded, this will be
+ zero and the single value will be stored in ``first_value``.
+ encoded_data (bytes):
+ The encoded deltas that are encoded using the
+ Golomb-Rice coder.
+ """
+
+ first_value = proto.Field(
+ proto.INT64,
+ number=1,
+ )
+ rice_parameter = proto.Field(
+ proto.INT32,
+ number=2,
+ )
+ entry_count = proto.Field(
+ proto.INT32,
+ number=3,
+ )
+ encoded_data = proto.Field(
+ proto.BYTES,
+ number=4,
+ )
+
+
+class Submission(proto.Message):
+ r"""Wraps a URI that might be displaying phishing content.
+ Attributes:
+ uri (str):
+ Required. The URI that is being reported for
+ phishing content to be analyzed.
+ """
+
+ uri = proto.Field(
+ proto.STRING,
+ number=1,
+ )
+
+
+class CreateSubmissionRequest(proto.Message):
+ r"""Request to send a potentially phishy URI to WebRisk.
+ Attributes:
+ parent (str):
+ Required. The name of the project that is making the
+ submission. This string is in the format
+ "projects/{project_number}".
+ submission (google.cloud.webrisk_v1.types.Submission):
+ Required. The submission that contains the
+ content of the phishing report.
+ """
+
+ parent = proto.Field(
+ proto.STRING,
+ number=1,
+ )
+ submission = proto.Field(
+ proto.MESSAGE,
+ number=2,
+ message='Submission',
+ )
+
+
+__all__ = tuple(sorted(__protobuf__.manifest))
diff --git a/owl-bot-staging/v1/mypy.ini b/owl-bot-staging/v1/mypy.ini
new file mode 100644
index 0000000..4505b48
--- /dev/null
+++ b/owl-bot-staging/v1/mypy.ini
@@ -0,0 +1,3 @@
+[mypy]
+python_version = 3.6
+namespace_packages = True
diff --git a/owl-bot-staging/v1/noxfile.py b/owl-bot-staging/v1/noxfile.py
new file mode 100644
index 0000000..0b4d2d3
--- /dev/null
+++ b/owl-bot-staging/v1/noxfile.py
@@ -0,0 +1,132 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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 pathlib
+import shutil
+import subprocess
+import sys
+
+
+import nox # type: ignore
+
+CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute()
+
+LOWER_BOUND_CONSTRAINTS_FILE = CURRENT_DIRECTORY / "constraints.txt"
+PACKAGE_NAME = subprocess.check_output([sys.executable, "setup.py", "--name"], encoding="utf-8")
+
+
+nox.sessions = [
+ "unit",
+ "cover",
+ "mypy",
+ "check_lower_bounds"
+ # exclude update_lower_bounds from default
+ "docs",
+]
+
+@nox.session(python=['3.6', '3.7', '3.8', '3.9'])
+def unit(session):
+ """Run the unit test suite."""
+
+ session.install('coverage', 'pytest', 'pytest-cov', 'asyncmock', 'pytest-asyncio')
+ session.install('-e', '.')
+
+ session.run(
+ 'py.test',
+ '--quiet',
+ '--cov=google/cloud/webrisk_v1/',
+ '--cov-config=.coveragerc',
+ '--cov-report=term',
+ '--cov-report=html',
+ os.path.join('tests', 'unit', ''.join(session.posargs))
+ )
+
+
+@nox.session(python='3.7')
+def cover(session):
+ """Run the final coverage report.
+ This outputs the coverage report aggregating coverage from the unit
+ test runs (not system test runs), and then erases coverage data.
+ """
+ session.install("coverage", "pytest-cov")
+ session.run("coverage", "report", "--show-missing", "--fail-under=100")
+
+ session.run("coverage", "erase")
+
+
+@nox.session(python=['3.6', '3.7'])
+def mypy(session):
+ """Run the type checker."""
+ session.install('mypy', 'types-pkg_resources')
+ session.install('.')
+ session.run(
+ 'mypy',
+ '--explicit-package-bases',
+ 'google',
+ )
+
+
+@nox.session
+def update_lower_bounds(session):
+ """Update lower bounds in constraints.txt to match setup.py"""
+ session.install('google-cloud-testutils')
+ session.install('.')
+
+ session.run(
+ 'lower-bound-checker',
+ 'update',
+ '--package-name',
+ PACKAGE_NAME,
+ '--constraints-file',
+ str(LOWER_BOUND_CONSTRAINTS_FILE),
+ )
+
+
+@nox.session
+def check_lower_bounds(session):
+ """Check lower bounds in setup.py are reflected in constraints file"""
+ session.install('google-cloud-testutils')
+ session.install('.')
+
+ session.run(
+ 'lower-bound-checker',
+ 'check',
+ '--package-name',
+ PACKAGE_NAME,
+ '--constraints-file',
+ str(LOWER_BOUND_CONSTRAINTS_FILE),
+ )
+
+@nox.session(python='3.6')
+def docs(session):
+ """Build the docs for this library."""
+
+ session.install("-e", ".")
+ session.install("sphinx<3.0.0", "alabaster", "recommonmark")
+
+ shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True)
+ session.run(
+ "sphinx-build",
+ "-W", # warnings as errors
+ "-T", # show full traceback on exception
+ "-N", # no colors
+ "-b",
+ "html",
+ "-d",
+ os.path.join("docs", "_build", "doctrees", ""),
+ os.path.join("docs", ""),
+ os.path.join("docs", "_build", "html", ""),
+ )
diff --git a/owl-bot-staging/v1/scripts/fixup_webrisk_v1_keywords.py b/owl-bot-staging/v1/scripts/fixup_webrisk_v1_keywords.py
new file mode 100644
index 0000000..db9f1d3
--- /dev/null
+++ b/owl-bot-staging/v1/scripts/fixup_webrisk_v1_keywords.py
@@ -0,0 +1,179 @@
+#! /usr/bin/env python3
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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 argparse
+import os
+import libcst as cst
+import pathlib
+import sys
+from typing import (Any, Callable, Dict, List, Sequence, Tuple)
+
+
+def partition(
+ predicate: Callable[[Any], bool],
+ iterator: Sequence[Any]
+) -> Tuple[List[Any], List[Any]]:
+ """A stable, out-of-place partition."""
+ results = ([], [])
+
+ for i in iterator:
+ results[int(predicate(i))].append(i)
+
+ # Returns trueList, falseList
+ return results[1], results[0]
+
+
+class webriskCallTransformer(cst.CSTTransformer):
+ CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata')
+ METHOD_TO_PARAMS: Dict[str, Tuple[str]] = {
+ 'compute_threat_list_diff': ('threat_type', 'constraints', 'version_token', ),
+ 'create_submission': ('parent', 'submission', ),
+ 'search_hashes': ('threat_types', 'hash_prefix', ),
+ 'search_uris': ('uri', 'threat_types', ),
+ }
+
+ def leave_Call(self, original: cst.Call, updated: cst.Call) -> cst.CSTNode:
+ try:
+ key = original.func.attr.value
+ kword_params = self.METHOD_TO_PARAMS[key]
+ except (AttributeError, KeyError):
+ # Either not a method from the API or too convoluted to be sure.
+ return updated
+
+ # If the existing code is valid, keyword args come after positional args.
+ # Therefore, all positional args must map to the first parameters.
+ args, kwargs = partition(lambda a: not bool(a.keyword), updated.args)
+ if any(k.keyword.value == "request" for k in kwargs):
+ # We've already fixed this file, don't fix it again.
+ return updated
+
+ kwargs, ctrl_kwargs = partition(
+ lambda a: not a.keyword.value in self.CTRL_PARAMS,
+ kwargs
+ )
+
+ args, ctrl_args = args[:len(kword_params)], args[len(kword_params):]
+ ctrl_kwargs.extend(cst.Arg(value=a.value, keyword=cst.Name(value=ctrl))
+ for a, ctrl in zip(ctrl_args, self.CTRL_PARAMS))
+
+ request_arg = cst.Arg(
+ value=cst.Dict([
+ cst.DictElement(
+ cst.SimpleString("'{}'".format(name)),
+cst.Element(value=arg.value)
+ )
+ # Note: the args + kwargs looks silly, but keep in mind that
+ # the control parameters had to be stripped out, and that
+ # those could have been passed positionally or by keyword.
+ for name, arg in zip(kword_params, args + kwargs)]),
+ keyword=cst.Name("request")
+ )
+
+ return updated.with_changes(
+ args=[request_arg] + ctrl_kwargs
+ )
+
+
+def fix_files(
+ in_dir: pathlib.Path,
+ out_dir: pathlib.Path,
+ *,
+ transformer=webriskCallTransformer(),
+):
+ """Duplicate the input dir to the output dir, fixing file method calls.
+
+ Preconditions:
+ * in_dir is a real directory
+ * out_dir is a real, empty directory
+ """
+ pyfile_gen = (
+ pathlib.Path(os.path.join(root, f))
+ for root, _, files in os.walk(in_dir)
+ for f in files if os.path.splitext(f)[1] == ".py"
+ )
+
+ for fpath in pyfile_gen:
+ with open(fpath, 'r') as f:
+ src = f.read()
+
+ # Parse the code and insert method call fixes.
+ tree = cst.parse_module(src)
+ updated = tree.visit(transformer)
+
+ # Create the path and directory structure for the new file.
+ updated_path = out_dir.joinpath(fpath.relative_to(in_dir))
+ updated_path.parent.mkdir(parents=True, exist_ok=True)
+
+ # Generate the updated source file at the corresponding path.
+ with open(updated_path, 'w') as f:
+ f.write(updated.code)
+
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser(
+ description="""Fix up source that uses the webrisk client library.
+
+The existing sources are NOT overwritten but are copied to output_dir with changes made.
+
+Note: This tool operates at a best-effort level at converting positional
+ parameters in client method calls to keyword based parameters.
+ Cases where it WILL FAIL include
+ A) * or ** expansion in a method call.
+ B) Calls via function or method alias (includes free function calls)
+ C) Indirect or dispatched calls (e.g. the method is looked up dynamically)
+
+ These all constitute false negatives. The tool will also detect false
+ positives when an API method shares a name with another method.
+""")
+ parser.add_argument(
+ '-d',
+ '--input-directory',
+ required=True,
+ dest='input_dir',
+ help='the input directory to walk for python files to fix up',
+ )
+ parser.add_argument(
+ '-o',
+ '--output-directory',
+ required=True,
+ dest='output_dir',
+ help='the directory to output files fixed via un-flattening',
+ )
+ args = parser.parse_args()
+ input_dir = pathlib.Path(args.input_dir)
+ output_dir = pathlib.Path(args.output_dir)
+ if not input_dir.is_dir():
+ print(
+ f"input directory '{input_dir}' does not exist or is not a directory",
+ file=sys.stderr,
+ )
+ sys.exit(-1)
+
+ if not output_dir.is_dir():
+ print(
+ f"output directory '{output_dir}' does not exist or is not a directory",
+ file=sys.stderr,
+ )
+ sys.exit(-1)
+
+ if os.listdir(output_dir):
+ print(
+ f"output directory '{output_dir}' is not empty",
+ file=sys.stderr,
+ )
+ sys.exit(-1)
+
+ fix_files(input_dir, output_dir)
diff --git a/owl-bot-staging/v1/setup.py b/owl-bot-staging/v1/setup.py
new file mode 100644
index 0000000..de54b53
--- /dev/null
+++ b/owl-bot-staging/v1/setup.py
@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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 io
+import os
+import setuptools # type: ignore
+
+version = '0.1.0'
+
+package_root = os.path.abspath(os.path.dirname(__file__))
+
+readme_filename = os.path.join(package_root, 'README.rst')
+with io.open(readme_filename, encoding='utf-8') as readme_file:
+ readme = readme_file.read()
+
+setuptools.setup(
+ name='google-cloud-webrisk',
+ version=version,
+ long_description=readme,
+ packages=setuptools.PEP420PackageFinder.find(),
+ namespace_packages=('google', 'google.cloud'),
+ platforms='Posix; MacOS X; Windows',
+ include_package_data=True,
+ install_requires=(
+ 'google-api-core[grpc] >= 1.27.0, < 2.0.0dev',
+ 'libcst >= 0.2.5',
+ 'proto-plus >= 1.15.0',
+ 'packaging >= 14.3', ),
+ python_requires='>=3.6',
+ classifiers=[
+ 'Development Status :: 3 - Alpha',
+ 'Intended Audience :: Developers',
+ 'Operating System :: OS Independent',
+ 'Programming Language :: Python :: 3.6',
+ 'Programming Language :: Python :: 3.7',
+ 'Programming Language :: Python :: 3.8',
+ 'Topic :: Internet',
+ 'Topic :: Software Development :: Libraries :: Python Modules',
+ ],
+ zip_safe=False,
+)
diff --git a/owl-bot-staging/v1/tests/__init__.py b/owl-bot-staging/v1/tests/__init__.py
new file mode 100644
index 0000000..b54a5fc
--- /dev/null
+++ b/owl-bot-staging/v1/tests/__init__.py
@@ -0,0 +1,16 @@
+
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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/owl-bot-staging/v1/tests/unit/__init__.py b/owl-bot-staging/v1/tests/unit/__init__.py
new file mode 100644
index 0000000..b54a5fc
--- /dev/null
+++ b/owl-bot-staging/v1/tests/unit/__init__.py
@@ -0,0 +1,16 @@
+
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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/owl-bot-staging/v1/tests/unit/gapic/__init__.py b/owl-bot-staging/v1/tests/unit/gapic/__init__.py
new file mode 100644
index 0000000..b54a5fc
--- /dev/null
+++ b/owl-bot-staging/v1/tests/unit/gapic/__init__.py
@@ -0,0 +1,16 @@
+
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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/owl-bot-staging/v1/tests/unit/gapic/webrisk_v1/__init__.py b/owl-bot-staging/v1/tests/unit/gapic/webrisk_v1/__init__.py
new file mode 100644
index 0000000..b54a5fc
--- /dev/null
+++ b/owl-bot-staging/v1/tests/unit/gapic/webrisk_v1/__init__.py
@@ -0,0 +1,16 @@
+
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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/owl-bot-staging/v1/tests/unit/gapic/webrisk_v1/test_web_risk_service.py b/owl-bot-staging/v1/tests/unit/gapic/webrisk_v1/test_web_risk_service.py
new file mode 100644
index 0000000..e0a6152
--- /dev/null
+++ b/owl-bot-staging/v1/tests/unit/gapic/webrisk_v1/test_web_risk_service.py
@@ -0,0 +1,1675 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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 mock
+import packaging.version
+
+import grpc
+from grpc.experimental import aio
+import math
+import pytest
+from proto.marshal.rules.dates import DurationRule, TimestampRule
+
+
+from google.api_core import client_options
+from google.api_core import exceptions as core_exceptions
+from google.api_core import gapic_v1
+from google.api_core import grpc_helpers
+from google.api_core import grpc_helpers_async
+from google.auth import credentials as ga_credentials
+from google.auth.exceptions import MutualTLSChannelError
+from google.cloud.webrisk_v1.services.web_risk_service import WebRiskServiceAsyncClient
+from google.cloud.webrisk_v1.services.web_risk_service import WebRiskServiceClient
+from google.cloud.webrisk_v1.services.web_risk_service import transports
+from google.cloud.webrisk_v1.services.web_risk_service.transports.base import _GOOGLE_AUTH_VERSION
+from google.cloud.webrisk_v1.types import webrisk
+from google.oauth2 import service_account
+from google.protobuf import timestamp_pb2 # type: ignore
+import google.auth
+
+
+# TODO(busunkim): Once google-auth >= 1.25.0 is required transitively
+# through google-api-core:
+# - Delete the auth "less than" test cases
+# - Delete these pytest markers (Make the "greater than or equal to" tests the default).
+requires_google_auth_lt_1_25_0 = pytest.mark.skipif(
+ packaging.version.parse(_GOOGLE_AUTH_VERSION) >= packaging.version.parse("1.25.0"),
+ reason="This test requires google-auth < 1.25.0",
+)
+requires_google_auth_gte_1_25_0 = pytest.mark.skipif(
+ packaging.version.parse(_GOOGLE_AUTH_VERSION) < packaging.version.parse("1.25.0"),
+ reason="This test requires google-auth >= 1.25.0",
+)
+
+def client_cert_source_callback():
+ return b"cert bytes", b"key bytes"
+
+
+# If default endpoint is localhost, then default mtls endpoint will be the same.
+# This method modifies the default endpoint so the client can produce a different
+# mtls endpoint for endpoint testing purposes.
+def modify_default_endpoint(client):
+ return "foo.googleapis.com" if ("localhost" in client.DEFAULT_ENDPOINT) else client.DEFAULT_ENDPOINT
+
+
+def test__get_default_mtls_endpoint():
+ api_endpoint = "example.googleapis.com"
+ api_mtls_endpoint = "example.mtls.googleapis.com"
+ sandbox_endpoint = "example.sandbox.googleapis.com"
+ sandbox_mtls_endpoint = "example.mtls.sandbox.googleapis.com"
+ non_googleapi = "api.example.com"
+
+ assert WebRiskServiceClient._get_default_mtls_endpoint(None) is None
+ assert WebRiskServiceClient._get_default_mtls_endpoint(api_endpoint) == api_mtls_endpoint
+ assert WebRiskServiceClient._get_default_mtls_endpoint(api_mtls_endpoint) == api_mtls_endpoint
+ assert WebRiskServiceClient._get_default_mtls_endpoint(sandbox_endpoint) == sandbox_mtls_endpoint
+ assert WebRiskServiceClient._get_default_mtls_endpoint(sandbox_mtls_endpoint) == sandbox_mtls_endpoint
+ assert WebRiskServiceClient._get_default_mtls_endpoint(non_googleapi) == non_googleapi
+
+
+@pytest.mark.parametrize("client_class", [
+ WebRiskServiceClient,
+ WebRiskServiceAsyncClient,
+])
+def test_web_risk_service_client_from_service_account_info(client_class):
+ creds = ga_credentials.AnonymousCredentials()
+ with mock.patch.object(service_account.Credentials, 'from_service_account_info') as factory:
+ factory.return_value = creds
+ info = {"valid": True}
+ client = client_class.from_service_account_info(info)
+ assert client.transport._credentials == creds
+ assert isinstance(client, client_class)
+
+ assert client.transport._host == 'webrisk.googleapis.com:443'
+
+
+@pytest.mark.parametrize("client_class", [
+ WebRiskServiceClient,
+ WebRiskServiceAsyncClient,
+])
+def test_web_risk_service_client_service_account_always_use_jwt(client_class):
+ with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt:
+ creds = service_account.Credentials(None, None, None)
+ client = client_class(credentials=creds)
+ use_jwt.assert_not_called()
+
+
+@pytest.mark.parametrize("transport_class,transport_name", [
+ (transports.WebRiskServiceGrpcTransport, "grpc"),
+ (transports.WebRiskServiceGrpcAsyncIOTransport, "grpc_asyncio"),
+])
+def test_web_risk_service_client_service_account_always_use_jwt_true(transport_class, transport_name):
+ with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt:
+ creds = service_account.Credentials(None, None, None)
+ transport = transport_class(credentials=creds, always_use_jwt_access=True)
+ use_jwt.assert_called_once_with(True)
+
+
+@pytest.mark.parametrize("client_class", [
+ WebRiskServiceClient,
+ WebRiskServiceAsyncClient,
+])
+def test_web_risk_service_client_from_service_account_file(client_class):
+ creds = ga_credentials.AnonymousCredentials()
+ with mock.patch.object(service_account.Credentials, 'from_service_account_file') as factory:
+ factory.return_value = creds
+ client = client_class.from_service_account_file("dummy/file/path.json")
+ assert client.transport._credentials == creds
+ assert isinstance(client, client_class)
+
+ client = client_class.from_service_account_json("dummy/file/path.json")
+ assert client.transport._credentials == creds
+ assert isinstance(client, client_class)
+
+ assert client.transport._host == 'webrisk.googleapis.com:443'
+
+
+def test_web_risk_service_client_get_transport_class():
+ transport = WebRiskServiceClient.get_transport_class()
+ available_transports = [
+ transports.WebRiskServiceGrpcTransport,
+ ]
+ assert transport in available_transports
+
+ transport = WebRiskServiceClient.get_transport_class("grpc")
+ assert transport == transports.WebRiskServiceGrpcTransport
+
+
+@pytest.mark.parametrize("client_class,transport_class,transport_name", [
+ (WebRiskServiceClient, transports.WebRiskServiceGrpcTransport, "grpc"),
+ (WebRiskServiceAsyncClient, transports.WebRiskServiceGrpcAsyncIOTransport, "grpc_asyncio"),
+])
+@mock.patch.object(WebRiskServiceClient, "DEFAULT_ENDPOINT", modify_default_endpoint(WebRiskServiceClient))
+@mock.patch.object(WebRiskServiceAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(WebRiskServiceAsyncClient))
+def test_web_risk_service_client_client_options(client_class, transport_class, transport_name):
+ # Check that if channel is provided we won't create a new one.
+ with mock.patch.object(WebRiskServiceClient, 'get_transport_class') as gtc:
+ transport = transport_class(
+ credentials=ga_credentials.AnonymousCredentials()
+ )
+ client = client_class(transport=transport)
+ gtc.assert_not_called()
+
+ # Check that if channel is provided via str we will create a new one.
+ with mock.patch.object(WebRiskServiceClient, 'get_transport_class') as gtc:
+ client = client_class(transport=transport_name)
+ gtc.assert_called()
+
+ # Check the case api_endpoint is provided.
+ options = client_options.ClientOptions(api_endpoint="squid.clam.whelk")
+ with mock.patch.object(transport_class, '__init__') as patched:
+ patched.return_value = None
+ client = client_class(client_options=options)
+ patched.assert_called_once_with(
+ credentials=None,
+ credentials_file=None,
+ host="squid.clam.whelk",
+ scopes=None,
+ client_cert_source_for_mtls=None,
+ quota_project_id=None,
+ client_info=transports.base.DEFAULT_CLIENT_INFO,
+ )
+
+ # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is
+ # "never".
+ with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}):
+ with mock.patch.object(transport_class, '__init__') as patched:
+ patched.return_value = None
+ client = client_class()
+ patched.assert_called_once_with(
+ credentials=None,
+ credentials_file=None,
+ host=client.DEFAULT_ENDPOINT,
+ scopes=None,
+ client_cert_source_for_mtls=None,
+ quota_project_id=None,
+ client_info=transports.base.DEFAULT_CLIENT_INFO,
+ )
+
+ # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is
+ # "always".
+ with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}):
+ with mock.patch.object(transport_class, '__init__') as patched:
+ patched.return_value = None
+ client = client_class()
+ patched.assert_called_once_with(
+ credentials=None,
+ credentials_file=None,
+ host=client.DEFAULT_MTLS_ENDPOINT,
+ scopes=None,
+ client_cert_source_for_mtls=None,
+ quota_project_id=None,
+ client_info=transports.base.DEFAULT_CLIENT_INFO,
+ )
+
+ # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has
+ # unsupported value.
+ with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}):
+ with pytest.raises(MutualTLSChannelError):
+ client = client_class()
+
+ # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value.
+ with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"}):
+ with pytest.raises(ValueError):
+ client = client_class()
+
+ # Check the case quota_project_id is provided
+ options = client_options.ClientOptions(quota_project_id="octopus")
+ with mock.patch.object(transport_class, '__init__') as patched:
+ patched.return_value = None
+ client = client_class(client_options=options)
+ patched.assert_called_once_with(
+ credentials=None,
+ credentials_file=None,
+ host=client.DEFAULT_ENDPOINT,
+ scopes=None,
+ client_cert_source_for_mtls=None,
+ quota_project_id="octopus",
+ client_info=transports.base.DEFAULT_CLIENT_INFO,
+ )
+
+@pytest.mark.parametrize("client_class,transport_class,transport_name,use_client_cert_env", [
+ (WebRiskServiceClient, transports.WebRiskServiceGrpcTransport, "grpc", "true"),
+ (WebRiskServiceAsyncClient, transports.WebRiskServiceGrpcAsyncIOTransport, "grpc_asyncio", "true"),
+ (WebRiskServiceClient, transports.WebRiskServiceGrpcTransport, "grpc", "false"),
+ (WebRiskServiceAsyncClient, transports.WebRiskServiceGrpcAsyncIOTransport, "grpc_asyncio", "false"),
+])
+@mock.patch.object(WebRiskServiceClient, "DEFAULT_ENDPOINT", modify_default_endpoint(WebRiskServiceClient))
+@mock.patch.object(WebRiskServiceAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(WebRiskServiceAsyncClient))
+@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"})
+def test_web_risk_service_client_mtls_env_auto(client_class, transport_class, transport_name, use_client_cert_env):
+ # This tests the endpoint autoswitch behavior. Endpoint is autoswitched to the default
+ # mtls endpoint, if GOOGLE_API_USE_CLIENT_CERTIFICATE is "true" and client cert exists.
+
+ # Check the case client_cert_source is provided. Whether client cert is used depends on
+ # GOOGLE_API_USE_CLIENT_CERTIFICATE value.
+ with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}):
+ options = client_options.ClientOptions(client_cert_source=client_cert_source_callback)
+ with mock.patch.object(transport_class, '__init__') as patched:
+ patched.return_value = None
+ client = client_class(client_options=options)
+
+ if use_client_cert_env == "false":
+ expected_client_cert_source = None
+ expected_host = client.DEFAULT_ENDPOINT
+ else:
+ expected_client_cert_source = client_cert_source_callback
+ expected_host = client.DEFAULT_MTLS_ENDPOINT
+
+ patched.assert_called_once_with(
+ credentials=None,
+ credentials_file=None,
+ host=expected_host,
+ scopes=None,
+ client_cert_source_for_mtls=expected_client_cert_source,
+ quota_project_id=None,
+ client_info=transports.base.DEFAULT_CLIENT_INFO,
+ )
+
+ # Check the case ADC client cert is provided. Whether client cert is used depends on
+ # GOOGLE_API_USE_CLIENT_CERTIFICATE value.
+ with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}):
+ with mock.patch.object(transport_class, '__init__') as patched:
+ with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=True):
+ with mock.patch('google.auth.transport.mtls.default_client_cert_source', return_value=client_cert_source_callback):
+ if use_client_cert_env == "false":
+ expected_host = client.DEFAULT_ENDPOINT
+ expected_client_cert_source = None
+ else:
+ expected_host = client.DEFAULT_MTLS_ENDPOINT
+ expected_client_cert_source = client_cert_source_callback
+
+ patched.return_value = None
+ client = client_class()
+ patched.assert_called_once_with(
+ credentials=None,
+ credentials_file=None,
+ host=expected_host,
+ scopes=None,
+ client_cert_source_for_mtls=expected_client_cert_source,
+ quota_project_id=None,
+ client_info=transports.base.DEFAULT_CLIENT_INFO,
+ )
+
+ # Check the case client_cert_source and ADC client cert are not provided.
+ with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}):
+ with mock.patch.object(transport_class, '__init__') as patched:
+ with mock.patch("google.auth.transport.mtls.has_default_client_cert_source", return_value=False):
+ patched.return_value = None
+ client = client_class()
+ patched.assert_called_once_with(
+ credentials=None,
+ credentials_file=None,
+ host=client.DEFAULT_ENDPOINT,
+ scopes=None,
+ client_cert_source_for_mtls=None,
+ quota_project_id=None,
+ client_info=transports.base.DEFAULT_CLIENT_INFO,
+ )
+
+
+@pytest.mark.parametrize("client_class,transport_class,transport_name", [
+ (WebRiskServiceClient, transports.WebRiskServiceGrpcTransport, "grpc"),
+ (WebRiskServiceAsyncClient, transports.WebRiskServiceGrpcAsyncIOTransport, "grpc_asyncio"),
+])
+def test_web_risk_service_client_client_options_scopes(client_class, transport_class, transport_name):
+ # Check the case scopes are provided.
+ options = client_options.ClientOptions(
+ scopes=["1", "2"],
+ )
+ with mock.patch.object(transport_class, '__init__') as patched:
+ patched.return_value = None
+ client = client_class(client_options=options)
+ patched.assert_called_once_with(
+ credentials=None,
+ credentials_file=None,
+ host=client.DEFAULT_ENDPOINT,
+ scopes=["1", "2"],
+ client_cert_source_for_mtls=None,
+ quota_project_id=None,
+ client_info=transports.base.DEFAULT_CLIENT_INFO,
+ )
+
+@pytest.mark.parametrize("client_class,transport_class,transport_name", [
+ (WebRiskServiceClient, transports.WebRiskServiceGrpcTransport, "grpc"),
+ (WebRiskServiceAsyncClient, transports.WebRiskServiceGrpcAsyncIOTransport, "grpc_asyncio"),
+])
+def test_web_risk_service_client_client_options_credentials_file(client_class, transport_class, transport_name):
+ # Check the case credentials file is provided.
+ options = client_options.ClientOptions(
+ credentials_file="credentials.json"
+ )
+ with mock.patch.object(transport_class, '__init__') as patched:
+ patched.return_value = None
+ client = client_class(client_options=options)
+ patched.assert_called_once_with(
+ credentials=None,
+ credentials_file="credentials.json",
+ host=client.DEFAULT_ENDPOINT,
+ scopes=None,
+ client_cert_source_for_mtls=None,
+ quota_project_id=None,
+ client_info=transports.base.DEFAULT_CLIENT_INFO,
+ )
+
+
+def test_web_risk_service_client_client_options_from_dict():
+ with mock.patch('google.cloud.webrisk_v1.services.web_risk_service.transports.WebRiskServiceGrpcTransport.__init__') as grpc_transport:
+ grpc_transport.return_value = None
+ client = WebRiskServiceClient(
+ client_options={'api_endpoint': 'squid.clam.whelk'}
+ )
+ grpc_transport.assert_called_once_with(
+ credentials=None,
+ credentials_file=None,
+ host="squid.clam.whelk",
+ scopes=None,
+ client_cert_source_for_mtls=None,
+ quota_project_id=None,
+ client_info=transports.base.DEFAULT_CLIENT_INFO,
+ )
+
+
+def test_compute_threat_list_diff(transport: str = 'grpc', request_type=webrisk.ComputeThreatListDiffRequest):
+ client = WebRiskServiceClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport=transport,
+ )
+
+ # Everything is optional in proto3 as far as the runtime is concerned,
+ # and we are mocking out the actual API, so just send an empty request.
+ request = request_type()
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.compute_threat_list_diff),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value = webrisk.ComputeThreatListDiffResponse(
+ response_type=webrisk.ComputeThreatListDiffResponse.ResponseType.DIFF,
+ new_version_token=b'new_version_token_blob',
+ )
+ response = client.compute_threat_list_diff(request)
+
+ # Establish that the underlying gRPC stub method was called.
+ assert len(call.mock_calls) == 1
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == webrisk.ComputeThreatListDiffRequest()
+
+ # Establish that the response is the type that we expect.
+ assert isinstance(response, webrisk.ComputeThreatListDiffResponse)
+ assert response.response_type == webrisk.ComputeThreatListDiffResponse.ResponseType.DIFF
+ assert response.new_version_token == b'new_version_token_blob'
+
+
+def test_compute_threat_list_diff_from_dict():
+ test_compute_threat_list_diff(request_type=dict)
+
+
+def test_compute_threat_list_diff_empty_call():
+ # This test is a coverage failsafe to make sure that totally empty calls,
+ # i.e. request == None and no flattened fields passed, work.
+ client = WebRiskServiceClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport='grpc',
+ )
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.compute_threat_list_diff),
+ '__call__') as call:
+ client.compute_threat_list_diff()
+ call.assert_called()
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == webrisk.ComputeThreatListDiffRequest()
+
+
+@pytest.mark.asyncio
+async def test_compute_threat_list_diff_async(transport: str = 'grpc_asyncio', request_type=webrisk.ComputeThreatListDiffRequest):
+ client = WebRiskServiceAsyncClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport=transport,
+ )
+
+ # Everything is optional in proto3 as far as the runtime is concerned,
+ # and we are mocking out the actual API, so just send an empty request.
+ request = request_type()
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.compute_threat_list_diff),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(webrisk.ComputeThreatListDiffResponse(
+ response_type=webrisk.ComputeThreatListDiffResponse.ResponseType.DIFF,
+ new_version_token=b'new_version_token_blob',
+ ))
+ response = await client.compute_threat_list_diff(request)
+
+ # Establish that the underlying gRPC stub method was called.
+ assert len(call.mock_calls)
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == webrisk.ComputeThreatListDiffRequest()
+
+ # Establish that the response is the type that we expect.
+ assert isinstance(response, webrisk.ComputeThreatListDiffResponse)
+ assert response.response_type == webrisk.ComputeThreatListDiffResponse.ResponseType.DIFF
+ assert response.new_version_token == b'new_version_token_blob'
+
+
+@pytest.mark.asyncio
+async def test_compute_threat_list_diff_async_from_dict():
+ await test_compute_threat_list_diff_async(request_type=dict)
+
+
+def test_compute_threat_list_diff_flattened():
+ client = WebRiskServiceClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.compute_threat_list_diff),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value = webrisk.ComputeThreatListDiffResponse()
+ # Call the method with a truthy value for each flattened field,
+ # using the keyword arguments to the method.
+ client.compute_threat_list_diff(
+ threat_type=webrisk.ThreatType.MALWARE,
+ version_token=b'version_token_blob',
+ constraints=webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687),
+ )
+
+ # Establish that the underlying call was made with the expected
+ # request object values.
+ assert len(call.mock_calls) == 1
+ _, args, _ = call.mock_calls[0]
+ assert args[0].threat_type == webrisk.ThreatType.MALWARE
+ assert args[0].version_token == b'version_token_blob'
+ assert args[0].constraints == webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687)
+
+
+def test_compute_threat_list_diff_flattened_error():
+ client = WebRiskServiceClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Attempting to call a method with both a request object and flattened
+ # fields is an error.
+ with pytest.raises(ValueError):
+ client.compute_threat_list_diff(
+ webrisk.ComputeThreatListDiffRequest(),
+ threat_type=webrisk.ThreatType.MALWARE,
+ version_token=b'version_token_blob',
+ constraints=webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687),
+ )
+
+
+@pytest.mark.asyncio
+async def test_compute_threat_list_diff_flattened_async():
+ client = WebRiskServiceAsyncClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.compute_threat_list_diff),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value = webrisk.ComputeThreatListDiffResponse()
+
+ call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(webrisk.ComputeThreatListDiffResponse())
+ # Call the method with a truthy value for each flattened field,
+ # using the keyword arguments to the method.
+ response = await client.compute_threat_list_diff(
+ threat_type=webrisk.ThreatType.MALWARE,
+ version_token=b'version_token_blob',
+ constraints=webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687),
+ )
+
+ # Establish that the underlying call was made with the expected
+ # request object values.
+ assert len(call.mock_calls)
+ _, args, _ = call.mock_calls[0]
+ assert args[0].threat_type == webrisk.ThreatType.MALWARE
+ assert args[0].version_token == b'version_token_blob'
+ assert args[0].constraints == webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687)
+
+
+@pytest.mark.asyncio
+async def test_compute_threat_list_diff_flattened_error_async():
+ client = WebRiskServiceAsyncClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Attempting to call a method with both a request object and flattened
+ # fields is an error.
+ with pytest.raises(ValueError):
+ await client.compute_threat_list_diff(
+ webrisk.ComputeThreatListDiffRequest(),
+ threat_type=webrisk.ThreatType.MALWARE,
+ version_token=b'version_token_blob',
+ constraints=webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687),
+ )
+
+
+def test_search_uris(transport: str = 'grpc', request_type=webrisk.SearchUrisRequest):
+ client = WebRiskServiceClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport=transport,
+ )
+
+ # Everything is optional in proto3 as far as the runtime is concerned,
+ # and we are mocking out the actual API, so just send an empty request.
+ request = request_type()
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.search_uris),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value = webrisk.SearchUrisResponse(
+ )
+ response = client.search_uris(request)
+
+ # Establish that the underlying gRPC stub method was called.
+ assert len(call.mock_calls) == 1
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == webrisk.SearchUrisRequest()
+
+ # Establish that the response is the type that we expect.
+ assert isinstance(response, webrisk.SearchUrisResponse)
+
+
+def test_search_uris_from_dict():
+ test_search_uris(request_type=dict)
+
+
+def test_search_uris_empty_call():
+ # This test is a coverage failsafe to make sure that totally empty calls,
+ # i.e. request == None and no flattened fields passed, work.
+ client = WebRiskServiceClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport='grpc',
+ )
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.search_uris),
+ '__call__') as call:
+ client.search_uris()
+ call.assert_called()
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == webrisk.SearchUrisRequest()
+
+
+@pytest.mark.asyncio
+async def test_search_uris_async(transport: str = 'grpc_asyncio', request_type=webrisk.SearchUrisRequest):
+ client = WebRiskServiceAsyncClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport=transport,
+ )
+
+ # Everything is optional in proto3 as far as the runtime is concerned,
+ # and we are mocking out the actual API, so just send an empty request.
+ request = request_type()
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.search_uris),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(webrisk.SearchUrisResponse(
+ ))
+ response = await client.search_uris(request)
+
+ # Establish that the underlying gRPC stub method was called.
+ assert len(call.mock_calls)
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == webrisk.SearchUrisRequest()
+
+ # Establish that the response is the type that we expect.
+ assert isinstance(response, webrisk.SearchUrisResponse)
+
+
+@pytest.mark.asyncio
+async def test_search_uris_async_from_dict():
+ await test_search_uris_async(request_type=dict)
+
+
+def test_search_uris_flattened():
+ client = WebRiskServiceClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.search_uris),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value = webrisk.SearchUrisResponse()
+ # Call the method with a truthy value for each flattened field,
+ # using the keyword arguments to the method.
+ client.search_uris(
+ uri='uri_value',
+ threat_types=[webrisk.ThreatType.MALWARE],
+ )
+
+ # Establish that the underlying call was made with the expected
+ # request object values.
+ assert len(call.mock_calls) == 1
+ _, args, _ = call.mock_calls[0]
+ assert args[0].uri == 'uri_value'
+ assert args[0].threat_types == [webrisk.ThreatType.MALWARE]
+
+
+def test_search_uris_flattened_error():
+ client = WebRiskServiceClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Attempting to call a method with both a request object and flattened
+ # fields is an error.
+ with pytest.raises(ValueError):
+ client.search_uris(
+ webrisk.SearchUrisRequest(),
+ uri='uri_value',
+ threat_types=[webrisk.ThreatType.MALWARE],
+ )
+
+
+@pytest.mark.asyncio
+async def test_search_uris_flattened_async():
+ client = WebRiskServiceAsyncClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.search_uris),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value = webrisk.SearchUrisResponse()
+
+ call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(webrisk.SearchUrisResponse())
+ # Call the method with a truthy value for each flattened field,
+ # using the keyword arguments to the method.
+ response = await client.search_uris(
+ uri='uri_value',
+ threat_types=[webrisk.ThreatType.MALWARE],
+ )
+
+ # Establish that the underlying call was made with the expected
+ # request object values.
+ assert len(call.mock_calls)
+ _, args, _ = call.mock_calls[0]
+ assert args[0].uri == 'uri_value'
+ assert args[0].threat_types == [webrisk.ThreatType.MALWARE]
+
+
+@pytest.mark.asyncio
+async def test_search_uris_flattened_error_async():
+ client = WebRiskServiceAsyncClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Attempting to call a method with both a request object and flattened
+ # fields is an error.
+ with pytest.raises(ValueError):
+ await client.search_uris(
+ webrisk.SearchUrisRequest(),
+ uri='uri_value',
+ threat_types=[webrisk.ThreatType.MALWARE],
+ )
+
+
+def test_search_hashes(transport: str = 'grpc', request_type=webrisk.SearchHashesRequest):
+ client = WebRiskServiceClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport=transport,
+ )
+
+ # Everything is optional in proto3 as far as the runtime is concerned,
+ # and we are mocking out the actual API, so just send an empty request.
+ request = request_type()
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.search_hashes),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value = webrisk.SearchHashesResponse(
+ )
+ response = client.search_hashes(request)
+
+ # Establish that the underlying gRPC stub method was called.
+ assert len(call.mock_calls) == 1
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == webrisk.SearchHashesRequest()
+
+ # Establish that the response is the type that we expect.
+ assert isinstance(response, webrisk.SearchHashesResponse)
+
+
+def test_search_hashes_from_dict():
+ test_search_hashes(request_type=dict)
+
+
+def test_search_hashes_empty_call():
+ # This test is a coverage failsafe to make sure that totally empty calls,
+ # i.e. request == None and no flattened fields passed, work.
+ client = WebRiskServiceClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport='grpc',
+ )
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.search_hashes),
+ '__call__') as call:
+ client.search_hashes()
+ call.assert_called()
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == webrisk.SearchHashesRequest()
+
+
+@pytest.mark.asyncio
+async def test_search_hashes_async(transport: str = 'grpc_asyncio', request_type=webrisk.SearchHashesRequest):
+ client = WebRiskServiceAsyncClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport=transport,
+ )
+
+ # Everything is optional in proto3 as far as the runtime is concerned,
+ # and we are mocking out the actual API, so just send an empty request.
+ request = request_type()
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.search_hashes),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(webrisk.SearchHashesResponse(
+ ))
+ response = await client.search_hashes(request)
+
+ # Establish that the underlying gRPC stub method was called.
+ assert len(call.mock_calls)
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == webrisk.SearchHashesRequest()
+
+ # Establish that the response is the type that we expect.
+ assert isinstance(response, webrisk.SearchHashesResponse)
+
+
+@pytest.mark.asyncio
+async def test_search_hashes_async_from_dict():
+ await test_search_hashes_async(request_type=dict)
+
+
+def test_search_hashes_flattened():
+ client = WebRiskServiceClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.search_hashes),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value = webrisk.SearchHashesResponse()
+ # Call the method with a truthy value for each flattened field,
+ # using the keyword arguments to the method.
+ client.search_hashes(
+ hash_prefix=b'hash_prefix_blob',
+ threat_types=[webrisk.ThreatType.MALWARE],
+ )
+
+ # Establish that the underlying call was made with the expected
+ # request object values.
+ assert len(call.mock_calls) == 1
+ _, args, _ = call.mock_calls[0]
+ assert args[0].hash_prefix == b'hash_prefix_blob'
+ assert args[0].threat_types == [webrisk.ThreatType.MALWARE]
+
+
+def test_search_hashes_flattened_error():
+ client = WebRiskServiceClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Attempting to call a method with both a request object and flattened
+ # fields is an error.
+ with pytest.raises(ValueError):
+ client.search_hashes(
+ webrisk.SearchHashesRequest(),
+ hash_prefix=b'hash_prefix_blob',
+ threat_types=[webrisk.ThreatType.MALWARE],
+ )
+
+
+@pytest.mark.asyncio
+async def test_search_hashes_flattened_async():
+ client = WebRiskServiceAsyncClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.search_hashes),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value = webrisk.SearchHashesResponse()
+
+ call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(webrisk.SearchHashesResponse())
+ # Call the method with a truthy value for each flattened field,
+ # using the keyword arguments to the method.
+ response = await client.search_hashes(
+ hash_prefix=b'hash_prefix_blob',
+ threat_types=[webrisk.ThreatType.MALWARE],
+ )
+
+ # Establish that the underlying call was made with the expected
+ # request object values.
+ assert len(call.mock_calls)
+ _, args, _ = call.mock_calls[0]
+ assert args[0].hash_prefix == b'hash_prefix_blob'
+ assert args[0].threat_types == [webrisk.ThreatType.MALWARE]
+
+
+@pytest.mark.asyncio
+async def test_search_hashes_flattened_error_async():
+ client = WebRiskServiceAsyncClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Attempting to call a method with both a request object and flattened
+ # fields is an error.
+ with pytest.raises(ValueError):
+ await client.search_hashes(
+ webrisk.SearchHashesRequest(),
+ hash_prefix=b'hash_prefix_blob',
+ threat_types=[webrisk.ThreatType.MALWARE],
+ )
+
+
+def test_create_submission(transport: str = 'grpc', request_type=webrisk.CreateSubmissionRequest):
+ client = WebRiskServiceClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport=transport,
+ )
+
+ # Everything is optional in proto3 as far as the runtime is concerned,
+ # and we are mocking out the actual API, so just send an empty request.
+ request = request_type()
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.create_submission),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value = webrisk.Submission(
+ uri='uri_value',
+ )
+ response = client.create_submission(request)
+
+ # Establish that the underlying gRPC stub method was called.
+ assert len(call.mock_calls) == 1
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == webrisk.CreateSubmissionRequest()
+
+ # Establish that the response is the type that we expect.
+ assert isinstance(response, webrisk.Submission)
+ assert response.uri == 'uri_value'
+
+
+def test_create_submission_from_dict():
+ test_create_submission(request_type=dict)
+
+
+def test_create_submission_empty_call():
+ # This test is a coverage failsafe to make sure that totally empty calls,
+ # i.e. request == None and no flattened fields passed, work.
+ client = WebRiskServiceClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport='grpc',
+ )
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.create_submission),
+ '__call__') as call:
+ client.create_submission()
+ call.assert_called()
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == webrisk.CreateSubmissionRequest()
+
+
+@pytest.mark.asyncio
+async def test_create_submission_async(transport: str = 'grpc_asyncio', request_type=webrisk.CreateSubmissionRequest):
+ client = WebRiskServiceAsyncClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport=transport,
+ )
+
+ # Everything is optional in proto3 as far as the runtime is concerned,
+ # and we are mocking out the actual API, so just send an empty request.
+ request = request_type()
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.create_submission),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(webrisk.Submission(
+ uri='uri_value',
+ ))
+ response = await client.create_submission(request)
+
+ # Establish that the underlying gRPC stub method was called.
+ assert len(call.mock_calls)
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == webrisk.CreateSubmissionRequest()
+
+ # Establish that the response is the type that we expect.
+ assert isinstance(response, webrisk.Submission)
+ assert response.uri == 'uri_value'
+
+
+@pytest.mark.asyncio
+async def test_create_submission_async_from_dict():
+ await test_create_submission_async(request_type=dict)
+
+
+def test_create_submission_field_headers():
+ client = WebRiskServiceClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Any value that is part of the HTTP/1.1 URI should be sent as
+ # a field header. Set these to a non-empty value.
+ request = webrisk.CreateSubmissionRequest()
+
+ request.parent = 'parent/value'
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.create_submission),
+ '__call__') as call:
+ call.return_value = webrisk.Submission()
+ client.create_submission(request)
+
+ # Establish that the underlying gRPC stub method was called.
+ assert len(call.mock_calls) == 1
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == request
+
+ # Establish that the field header was sent.
+ _, _, kw = call.mock_calls[0]
+ assert (
+ 'x-goog-request-params',
+ 'parent=parent/value',
+ ) in kw['metadata']
+
+
+@pytest.mark.asyncio
+async def test_create_submission_field_headers_async():
+ client = WebRiskServiceAsyncClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Any value that is part of the HTTP/1.1 URI should be sent as
+ # a field header. Set these to a non-empty value.
+ request = webrisk.CreateSubmissionRequest()
+
+ request.parent = 'parent/value'
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.create_submission),
+ '__call__') as call:
+ call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(webrisk.Submission())
+ await client.create_submission(request)
+
+ # Establish that the underlying gRPC stub method was called.
+ assert len(call.mock_calls)
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == request
+
+ # Establish that the field header was sent.
+ _, _, kw = call.mock_calls[0]
+ assert (
+ 'x-goog-request-params',
+ 'parent=parent/value',
+ ) in kw['metadata']
+
+
+def test_create_submission_flattened():
+ client = WebRiskServiceClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.create_submission),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value = webrisk.Submission()
+ # Call the method with a truthy value for each flattened field,
+ # using the keyword arguments to the method.
+ client.create_submission(
+ parent='parent_value',
+ submission=webrisk.Submission(uri='uri_value'),
+ )
+
+ # Establish that the underlying call was made with the expected
+ # request object values.
+ assert len(call.mock_calls) == 1
+ _, args, _ = call.mock_calls[0]
+ assert args[0].parent == 'parent_value'
+ assert args[0].submission == webrisk.Submission(uri='uri_value')
+
+
+def test_create_submission_flattened_error():
+ client = WebRiskServiceClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Attempting to call a method with both a request object and flattened
+ # fields is an error.
+ with pytest.raises(ValueError):
+ client.create_submission(
+ webrisk.CreateSubmissionRequest(),
+ parent='parent_value',
+ submission=webrisk.Submission(uri='uri_value'),
+ )
+
+
+@pytest.mark.asyncio
+async def test_create_submission_flattened_async():
+ client = WebRiskServiceAsyncClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.create_submission),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value = webrisk.Submission()
+
+ call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(webrisk.Submission())
+ # Call the method with a truthy value for each flattened field,
+ # using the keyword arguments to the method.
+ response = await client.create_submission(
+ parent='parent_value',
+ submission=webrisk.Submission(uri='uri_value'),
+ )
+
+ # Establish that the underlying call was made with the expected
+ # request object values.
+ assert len(call.mock_calls)
+ _, args, _ = call.mock_calls[0]
+ assert args[0].parent == 'parent_value'
+ assert args[0].submission == webrisk.Submission(uri='uri_value')
+
+
+@pytest.mark.asyncio
+async def test_create_submission_flattened_error_async():
+ client = WebRiskServiceAsyncClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Attempting to call a method with both a request object and flattened
+ # fields is an error.
+ with pytest.raises(ValueError):
+ await client.create_submission(
+ webrisk.CreateSubmissionRequest(),
+ parent='parent_value',
+ submission=webrisk.Submission(uri='uri_value'),
+ )
+
+
+def test_credentials_transport_error():
+ # It is an error to provide credentials and a transport instance.
+ transport = transports.WebRiskServiceGrpcTransport(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+ with pytest.raises(ValueError):
+ client = WebRiskServiceClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport=transport,
+ )
+
+ # It is an error to provide a credentials file and a transport instance.
+ transport = transports.WebRiskServiceGrpcTransport(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+ with pytest.raises(ValueError):
+ client = WebRiskServiceClient(
+ client_options={"credentials_file": "credentials.json"},
+ transport=transport,
+ )
+
+ # It is an error to provide scopes and a transport instance.
+ transport = transports.WebRiskServiceGrpcTransport(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+ with pytest.raises(ValueError):
+ client = WebRiskServiceClient(
+ client_options={"scopes": ["1", "2"]},
+ transport=transport,
+ )
+
+
+def test_transport_instance():
+ # A client may be instantiated with a custom transport instance.
+ transport = transports.WebRiskServiceGrpcTransport(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+ client = WebRiskServiceClient(transport=transport)
+ assert client.transport is transport
+
+def test_transport_get_channel():
+ # A client may be instantiated with a custom transport instance.
+ transport = transports.WebRiskServiceGrpcTransport(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+ channel = transport.grpc_channel
+ assert channel
+
+ transport = transports.WebRiskServiceGrpcAsyncIOTransport(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+ channel = transport.grpc_channel
+ assert channel
+
+@pytest.mark.parametrize("transport_class", [
+ transports.WebRiskServiceGrpcTransport,
+ transports.WebRiskServiceGrpcAsyncIOTransport,
+])
+def test_transport_adc(transport_class):
+ # Test default credentials are used if not provided.
+ with mock.patch.object(google.auth, 'default') as adc:
+ adc.return_value = (ga_credentials.AnonymousCredentials(), None)
+ transport_class()
+ adc.assert_called_once()
+
+def test_transport_grpc_default():
+ # A client should use the gRPC transport by default.
+ client = WebRiskServiceClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+ assert isinstance(
+ client.transport,
+ transports.WebRiskServiceGrpcTransport,
+ )
+
+def test_web_risk_service_base_transport_error():
+ # Passing both a credentials object and credentials_file should raise an error
+ with pytest.raises(core_exceptions.DuplicateCredentialArgs):
+ transport = transports.WebRiskServiceTransport(
+ credentials=ga_credentials.AnonymousCredentials(),
+ credentials_file="credentials.json"
+ )
+
+
+def test_web_risk_service_base_transport():
+ # Instantiate the base transport.
+ with mock.patch('google.cloud.webrisk_v1.services.web_risk_service.transports.WebRiskServiceTransport.__init__') as Transport:
+ Transport.return_value = None
+ transport = transports.WebRiskServiceTransport(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Every method on the transport should just blindly
+ # raise NotImplementedError.
+ methods = (
+ 'compute_threat_list_diff',
+ 'search_uris',
+ 'search_hashes',
+ 'create_submission',
+ )
+ for method in methods:
+ with pytest.raises(NotImplementedError):
+ getattr(transport, method)(request=object())
+
+
+@requires_google_auth_gte_1_25_0
+def test_web_risk_service_base_transport_with_credentials_file():
+ # Instantiate the base transport with a credentials file
+ with mock.patch.object(google.auth, 'load_credentials_from_file', autospec=True) as load_creds, mock.patch('google.cloud.webrisk_v1.services.web_risk_service.transports.WebRiskServiceTransport._prep_wrapped_messages') as Transport:
+ Transport.return_value = None
+ load_creds.return_value = (ga_credentials.AnonymousCredentials(), None)
+ transport = transports.WebRiskServiceTransport(
+ credentials_file="credentials.json",
+ quota_project_id="octopus",
+ )
+ load_creds.assert_called_once_with("credentials.json",
+ scopes=None,
+ default_scopes=(
+ 'https://www.googleapis.com/auth/cloud-platform',
+),
+ quota_project_id="octopus",
+ )
+
+
+@requires_google_auth_lt_1_25_0
+def test_web_risk_service_base_transport_with_credentials_file_old_google_auth():
+ # Instantiate the base transport with a credentials file
+ with mock.patch.object(google.auth, 'load_credentials_from_file', autospec=True) as load_creds, mock.patch('google.cloud.webrisk_v1.services.web_risk_service.transports.WebRiskServiceTransport._prep_wrapped_messages') as Transport:
+ Transport.return_value = None
+ load_creds.return_value = (ga_credentials.AnonymousCredentials(), None)
+ transport = transports.WebRiskServiceTransport(
+ credentials_file="credentials.json",
+ quota_project_id="octopus",
+ )
+ load_creds.assert_called_once_with("credentials.json", scopes=(
+ 'https://www.googleapis.com/auth/cloud-platform',
+ ),
+ quota_project_id="octopus",
+ )
+
+
+def test_web_risk_service_base_transport_with_adc():
+ # Test the default credentials are used if credentials and credentials_file are None.
+ with mock.patch.object(google.auth, 'default', autospec=True) as adc, mock.patch('google.cloud.webrisk_v1.services.web_risk_service.transports.WebRiskServiceTransport._prep_wrapped_messages') as Transport:
+ Transport.return_value = None
+ adc.return_value = (ga_credentials.AnonymousCredentials(), None)
+ transport = transports.WebRiskServiceTransport()
+ adc.assert_called_once()
+
+
+@requires_google_auth_gte_1_25_0
+def test_web_risk_service_auth_adc():
+ # If no credentials are provided, we should use ADC credentials.
+ with mock.patch.object(google.auth, 'default', autospec=True) as adc:
+ adc.return_value = (ga_credentials.AnonymousCredentials(), None)
+ WebRiskServiceClient()
+ adc.assert_called_once_with(
+ scopes=None,
+ default_scopes=(
+ 'https://www.googleapis.com/auth/cloud-platform',
+),
+ quota_project_id=None,
+ )
+
+
+@requires_google_auth_lt_1_25_0
+def test_web_risk_service_auth_adc_old_google_auth():
+ # If no credentials are provided, we should use ADC credentials.
+ with mock.patch.object(google.auth, 'default', autospec=True) as adc:
+ adc.return_value = (ga_credentials.AnonymousCredentials(), None)
+ WebRiskServiceClient()
+ adc.assert_called_once_with(
+ scopes=( 'https://www.googleapis.com/auth/cloud-platform',),
+ quota_project_id=None,
+ )
+
+
+@pytest.mark.parametrize(
+ "transport_class",
+ [
+ transports.WebRiskServiceGrpcTransport,
+ transports.WebRiskServiceGrpcAsyncIOTransport,
+ ],
+)
+@requires_google_auth_gte_1_25_0
+def test_web_risk_service_transport_auth_adc(transport_class):
+ # If credentials and host are not provided, the transport class should use
+ # ADC credentials.
+ with mock.patch.object(google.auth, 'default', autospec=True) as adc:
+ adc.return_value = (ga_credentials.AnonymousCredentials(), None)
+ transport_class(quota_project_id="octopus", scopes=["1", "2"])
+ adc.assert_called_once_with(
+ scopes=["1", "2"],
+ default_scopes=( 'https://www.googleapis.com/auth/cloud-platform',),
+ quota_project_id="octopus",
+ )
+
+
+@pytest.mark.parametrize(
+ "transport_class",
+ [
+ transports.WebRiskServiceGrpcTransport,
+ transports.WebRiskServiceGrpcAsyncIOTransport,
+ ],
+)
+@requires_google_auth_lt_1_25_0
+def test_web_risk_service_transport_auth_adc_old_google_auth(transport_class):
+ # If credentials and host are not provided, the transport class should use
+ # ADC credentials.
+ with mock.patch.object(google.auth, "default", autospec=True) as adc:
+ adc.return_value = (ga_credentials.AnonymousCredentials(), None)
+ transport_class(quota_project_id="octopus")
+ adc.assert_called_once_with(scopes=(
+ 'https://www.googleapis.com/auth/cloud-platform',
+),
+ quota_project_id="octopus",
+ )
+
+
+@pytest.mark.parametrize(
+ "transport_class,grpc_helpers",
+ [
+ (transports.WebRiskServiceGrpcTransport, grpc_helpers),
+ (transports.WebRiskServiceGrpcAsyncIOTransport, grpc_helpers_async)
+ ],
+)
+def test_web_risk_service_transport_create_channel(transport_class, grpc_helpers):
+ # If credentials and host are not provided, the transport class should use
+ # ADC credentials.
+ with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch.object(
+ grpc_helpers, "create_channel", autospec=True
+ ) as create_channel:
+ creds = ga_credentials.AnonymousCredentials()
+ adc.return_value = (creds, None)
+ transport_class(
+ quota_project_id="octopus",
+ scopes=["1", "2"]
+ )
+
+ create_channel.assert_called_with(
+ "webrisk.googleapis.com:443",
+ credentials=creds,
+ credentials_file=None,
+ quota_project_id="octopus",
+ default_scopes=(
+ 'https://www.googleapis.com/auth/cloud-platform',
+),
+ scopes=["1", "2"],
+ default_host="webrisk.googleapis.com",
+ ssl_credentials=None,
+ options=[
+ ("grpc.max_send_message_length", -1),
+ ("grpc.max_receive_message_length", -1),
+ ],
+ )
+
+
+@pytest.mark.parametrize("transport_class", [transports.WebRiskServiceGrpcTransport, transports.WebRiskServiceGrpcAsyncIOTransport])
+def test_web_risk_service_grpc_transport_client_cert_source_for_mtls(
+ transport_class
+):
+ cred = ga_credentials.AnonymousCredentials()
+
+ # Check ssl_channel_credentials is used if provided.
+ with mock.patch.object(transport_class, "create_channel") as mock_create_channel:
+ mock_ssl_channel_creds = mock.Mock()
+ transport_class(
+ host="squid.clam.whelk",
+ credentials=cred,
+ ssl_channel_credentials=mock_ssl_channel_creds
+ )
+ mock_create_channel.assert_called_once_with(
+ "squid.clam.whelk:443",
+ credentials=cred,
+ credentials_file=None,
+ scopes=None,
+ ssl_credentials=mock_ssl_channel_creds,
+ quota_project_id=None,
+ options=[
+ ("grpc.max_send_message_length", -1),
+ ("grpc.max_receive_message_length", -1),
+ ],
+ )
+
+ # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls
+ # is used.
+ with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()):
+ with mock.patch("grpc.ssl_channel_credentials") as mock_ssl_cred:
+ transport_class(
+ credentials=cred,
+ client_cert_source_for_mtls=client_cert_source_callback
+ )
+ expected_cert, expected_key = client_cert_source_callback()
+ mock_ssl_cred.assert_called_once_with(
+ certificate_chain=expected_cert,
+ private_key=expected_key
+ )
+
+
+def test_web_risk_service_host_no_port():
+ client = WebRiskServiceClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ client_options=client_options.ClientOptions(api_endpoint='webrisk.googleapis.com'),
+ )
+ assert client.transport._host == 'webrisk.googleapis.com:443'
+
+
+def test_web_risk_service_host_with_port():
+ client = WebRiskServiceClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ client_options=client_options.ClientOptions(api_endpoint='webrisk.googleapis.com:8000'),
+ )
+ assert client.transport._host == 'webrisk.googleapis.com:8000'
+
+def test_web_risk_service_grpc_transport_channel():
+ channel = grpc.secure_channel('http://localhost/', grpc.local_channel_credentials())
+
+ # Check that channel is used if provided.
+ transport = transports.WebRiskServiceGrpcTransport(
+ host="squid.clam.whelk",
+ channel=channel,
+ )
+ assert transport.grpc_channel == channel
+ assert transport._host == "squid.clam.whelk:443"
+ assert transport._ssl_channel_credentials == None
+
+
+def test_web_risk_service_grpc_asyncio_transport_channel():
+ channel = aio.secure_channel('http://localhost/', grpc.local_channel_credentials())
+
+ # Check that channel is used if provided.
+ transport = transports.WebRiskServiceGrpcAsyncIOTransport(
+ host="squid.clam.whelk",
+ channel=channel,
+ )
+ assert transport.grpc_channel == channel
+ assert transport._host == "squid.clam.whelk:443"
+ assert transport._ssl_channel_credentials == None
+
+
+# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are
+# removed from grpc/grpc_asyncio transport constructor.
+@pytest.mark.parametrize("transport_class", [transports.WebRiskServiceGrpcTransport, transports.WebRiskServiceGrpcAsyncIOTransport])
+def test_web_risk_service_transport_channel_mtls_with_client_cert_source(
+ transport_class
+):
+ with mock.patch("grpc.ssl_channel_credentials", autospec=True) as grpc_ssl_channel_cred:
+ with mock.patch.object(transport_class, "create_channel") as grpc_create_channel:
+ mock_ssl_cred = mock.Mock()
+ grpc_ssl_channel_cred.return_value = mock_ssl_cred
+
+ mock_grpc_channel = mock.Mock()
+ grpc_create_channel.return_value = mock_grpc_channel
+
+ cred = ga_credentials.AnonymousCredentials()
+ with pytest.warns(DeprecationWarning):
+ with mock.patch.object(google.auth, 'default') as adc:
+ adc.return_value = (cred, None)
+ transport = transport_class(
+ host="squid.clam.whelk",
+ api_mtls_endpoint="mtls.squid.clam.whelk",
+ client_cert_source=client_cert_source_callback,
+ )
+ adc.assert_called_once()
+
+ grpc_ssl_channel_cred.assert_called_once_with(
+ certificate_chain=b"cert bytes", private_key=b"key bytes"
+ )
+ grpc_create_channel.assert_called_once_with(
+ "mtls.squid.clam.whelk:443",
+ credentials=cred,
+ credentials_file=None,
+ scopes=None,
+ ssl_credentials=mock_ssl_cred,
+ quota_project_id=None,
+ options=[
+ ("grpc.max_send_message_length", -1),
+ ("grpc.max_receive_message_length", -1),
+ ],
+ )
+ assert transport.grpc_channel == mock_grpc_channel
+ assert transport._ssl_channel_credentials == mock_ssl_cred
+
+
+# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are
+# removed from grpc/grpc_asyncio transport constructor.
+@pytest.mark.parametrize("transport_class", [transports.WebRiskServiceGrpcTransport, transports.WebRiskServiceGrpcAsyncIOTransport])
+def test_web_risk_service_transport_channel_mtls_with_adc(
+ transport_class
+):
+ mock_ssl_cred = mock.Mock()
+ with mock.patch.multiple(
+ "google.auth.transport.grpc.SslCredentials",
+ __init__=mock.Mock(return_value=None),
+ ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred),
+ ):
+ with mock.patch.object(transport_class, "create_channel") as grpc_create_channel:
+ mock_grpc_channel = mock.Mock()
+ grpc_create_channel.return_value = mock_grpc_channel
+ mock_cred = mock.Mock()
+
+ with pytest.warns(DeprecationWarning):
+ transport = transport_class(
+ host="squid.clam.whelk",
+ credentials=mock_cred,
+ api_mtls_endpoint="mtls.squid.clam.whelk",
+ client_cert_source=None,
+ )
+
+ grpc_create_channel.assert_called_once_with(
+ "mtls.squid.clam.whelk:443",
+ credentials=mock_cred,
+ credentials_file=None,
+ scopes=None,
+ ssl_credentials=mock_ssl_cred,
+ quota_project_id=None,
+ options=[
+ ("grpc.max_send_message_length", -1),
+ ("grpc.max_receive_message_length", -1),
+ ],
+ )
+ assert transport.grpc_channel == mock_grpc_channel
+
+
+def test_common_billing_account_path():
+ billing_account = "squid"
+ expected = "billingAccounts/{billing_account}".format(billing_account=billing_account, )
+ actual = WebRiskServiceClient.common_billing_account_path(billing_account)
+ assert expected == actual
+
+
+def test_parse_common_billing_account_path():
+ expected = {
+ "billing_account": "clam",
+ }
+ path = WebRiskServiceClient.common_billing_account_path(**expected)
+
+ # Check that the path construction is reversible.
+ actual = WebRiskServiceClient.parse_common_billing_account_path(path)
+ assert expected == actual
+
+def test_common_folder_path():
+ folder = "whelk"
+ expected = "folders/{folder}".format(folder=folder, )
+ actual = WebRiskServiceClient.common_folder_path(folder)
+ assert expected == actual
+
+
+def test_parse_common_folder_path():
+ expected = {
+ "folder": "octopus",
+ }
+ path = WebRiskServiceClient.common_folder_path(**expected)
+
+ # Check that the path construction is reversible.
+ actual = WebRiskServiceClient.parse_common_folder_path(path)
+ assert expected == actual
+
+def test_common_organization_path():
+ organization = "oyster"
+ expected = "organizations/{organization}".format(organization=organization, )
+ actual = WebRiskServiceClient.common_organization_path(organization)
+ assert expected == actual
+
+
+def test_parse_common_organization_path():
+ expected = {
+ "organization": "nudibranch",
+ }
+ path = WebRiskServiceClient.common_organization_path(**expected)
+
+ # Check that the path construction is reversible.
+ actual = WebRiskServiceClient.parse_common_organization_path(path)
+ assert expected == actual
+
+def test_common_project_path():
+ project = "cuttlefish"
+ expected = "projects/{project}".format(project=project, )
+ actual = WebRiskServiceClient.common_project_path(project)
+ assert expected == actual
+
+
+def test_parse_common_project_path():
+ expected = {
+ "project": "mussel",
+ }
+ path = WebRiskServiceClient.common_project_path(**expected)
+
+ # Check that the path construction is reversible.
+ actual = WebRiskServiceClient.parse_common_project_path(path)
+ assert expected == actual
+
+def test_common_location_path():
+ project = "winkle"
+ location = "nautilus"
+ expected = "projects/{project}/locations/{location}".format(project=project, location=location, )
+ actual = WebRiskServiceClient.common_location_path(project, location)
+ assert expected == actual
+
+
+def test_parse_common_location_path():
+ expected = {
+ "project": "scallop",
+ "location": "abalone",
+ }
+ path = WebRiskServiceClient.common_location_path(**expected)
+
+ # Check that the path construction is reversible.
+ actual = WebRiskServiceClient.parse_common_location_path(path)
+ assert expected == actual
+
+
+def test_client_withDEFAULT_CLIENT_INFO():
+ client_info = gapic_v1.client_info.ClientInfo()
+
+ with mock.patch.object(transports.WebRiskServiceTransport, '_prep_wrapped_messages') as prep:
+ client = WebRiskServiceClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ client_info=client_info,
+ )
+ prep.assert_called_once_with(client_info)
+
+ with mock.patch.object(transports.WebRiskServiceTransport, '_prep_wrapped_messages') as prep:
+ transport_class = WebRiskServiceClient.get_transport_class()
+ transport = transport_class(
+ credentials=ga_credentials.AnonymousCredentials(),
+ client_info=client_info,
+ )
+ prep.assert_called_once_with(client_info)
diff --git a/owl-bot-staging/v1beta1/.coveragerc b/owl-bot-staging/v1beta1/.coveragerc
new file mode 100644
index 0000000..5b506b5
--- /dev/null
+++ b/owl-bot-staging/v1beta1/.coveragerc
@@ -0,0 +1,17 @@
+[run]
+branch = True
+
+[report]
+show_missing = True
+omit =
+ google/cloud/webrisk/__init__.py
+exclude_lines =
+ # Re-enable the standard pragma
+ pragma: NO COVER
+ # Ignore debug-only repr
+ def __repr__
+ # Ignore pkg_resources exceptions.
+ # This is added at the module level as a safeguard for if someone
+ # generates the code and tries to run it without pip installing. This
+ # makes it virtually impossible to test properly.
+ except pkg_resources.DistributionNotFound
diff --git a/owl-bot-staging/v1beta1/MANIFEST.in b/owl-bot-staging/v1beta1/MANIFEST.in
new file mode 100644
index 0000000..b95293c
--- /dev/null
+++ b/owl-bot-staging/v1beta1/MANIFEST.in
@@ -0,0 +1,2 @@
+recursive-include google/cloud/webrisk *.py
+recursive-include google/cloud/webrisk_v1beta1 *.py
diff --git a/owl-bot-staging/v1beta1/README.rst b/owl-bot-staging/v1beta1/README.rst
new file mode 100644
index 0000000..47325bb
--- /dev/null
+++ b/owl-bot-staging/v1beta1/README.rst
@@ -0,0 +1,49 @@
+Python Client for Google Cloud Webrisk API
+=================================================
+
+Quick Start
+-----------
+
+In order to use this library, you first need to go through the following steps:
+
+1. `Select or create a Cloud Platform project.`_
+2. `Enable billing for your project.`_
+3. Enable the Google Cloud Webrisk API.
+4. `Setup Authentication.`_
+
+.. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project
+.. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project
+.. _Setup Authentication.: https://googleapis.dev/python/google-api-core/latest/auth.html
+
+Installation
+~~~~~~~~~~~~
+
+Install this library in a `virtualenv`_ using pip. `virtualenv`_ is a tool to
+create isolated Python environments. The basic problem it addresses is one of
+dependencies and versions, and indirectly permissions.
+
+With `virtualenv`_, it's possible to install this library without needing system
+install permissions, and without clashing with the installed system
+dependencies.
+
+.. _`virtualenv`: https://virtualenv.pypa.io/en/latest/
+
+
+Mac/Linux
+^^^^^^^^^
+
+.. code-block:: console
+
+ python3 -m venv
+ source /bin/activate
+ /bin/pip install /path/to/library
+
+
+Windows
+^^^^^^^
+
+.. code-block:: console
+
+ python3 -m venv
+ \Scripts\activate
+ \Scripts\pip.exe install \path\to\library
diff --git a/owl-bot-staging/v1beta1/docs/conf.py b/owl-bot-staging/v1beta1/docs/conf.py
new file mode 100644
index 0000000..ed09c72
--- /dev/null
+++ b/owl-bot-staging/v1beta1/docs/conf.py
@@ -0,0 +1,376 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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.
+#
+#
+# google-cloud-webrisk documentation build configuration file
+#
+# This file is execfile()d with the current directory set to its
+# containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys
+import os
+import shlex
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+sys.path.insert(0, os.path.abspath(".."))
+
+__version__ = "0.1.0"
+
+# -- General configuration ------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+needs_sphinx = "1.6.3"
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+ "sphinx.ext.autodoc",
+ "sphinx.ext.autosummary",
+ "sphinx.ext.intersphinx",
+ "sphinx.ext.coverage",
+ "sphinx.ext.napoleon",
+ "sphinx.ext.todo",
+ "sphinx.ext.viewcode",
+]
+
+# autodoc/autosummary flags
+autoclass_content = "both"
+autodoc_default_flags = ["members"]
+autosummary_generate = True
+
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ["_templates"]
+
+# Allow markdown includes (so releases.md can include CHANGLEOG.md)
+# http://www.sphinx-doc.org/en/master/markdown.html
+source_parsers = {".md": "recommonmark.parser.CommonMarkParser"}
+
+# The suffix(es) of source filenames.
+# You can specify multiple suffix as a list of string:
+source_suffix = [".rst", ".md"]
+
+# The encoding of source files.
+# source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = "index"
+
+# General information about the project.
+project = u"google-cloud-webrisk"
+copyright = u"2020, Google, LLC"
+author = u"Google APIs" # TODO: autogenerate this bit
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The full version, including alpha/beta/rc tags.
+release = __version__
+# The short X.Y version.
+version = ".".join(release.split(".")[0:2])
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#
+# This is also used if you do content translation via gettext catalogs.
+# Usually you set "language" from the command line for these cases.
+language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+# today = ''
+# Else, today_fmt is used as the format for a strftime call.
+# today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = ["_build"]
+
+# The reST default role (used for this markup: `text`) to use for all
+# documents.
+# default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+# add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+# add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+# show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = "sphinx"
+
+# A list of ignored prefixes for module index sorting.
+# modindex_common_prefix = []
+
+# If true, keep warnings as "system message" paragraphs in the built documents.
+# keep_warnings = False
+
+# If true, `todo` and `todoList` produce output, else they produce nothing.
+todo_include_todos = True
+
+
+# -- Options for HTML output ----------------------------------------------
+
+# The theme to use for HTML and HTML Help pages. See the documentation for
+# a list of builtin themes.
+html_theme = "alabaster"
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further. For a list of options available for each theme, see the
+# documentation.
+html_theme_options = {
+ "description": "Google Cloud Client Libraries for Python",
+ "github_user": "googleapis",
+ "github_repo": "google-cloud-python",
+ "github_banner": True,
+ "font_family": "'Roboto', Georgia, sans",
+ "head_font_family": "'Roboto', Georgia, serif",
+ "code_font_family": "'Roboto Mono', 'Consolas', monospace",
+}
+
+# Add any paths that contain custom themes here, relative to this directory.
+# html_theme_path = []
+
+# The name for this set of Sphinx documents. If None, it defaults to
+# " v documentation".
+# html_title = None
+
+# A shorter title for the navigation bar. Default is the same as html_title.
+# html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+# html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+# html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ["_static"]
+
+# Add any extra paths that contain custom files (such as robots.txt or
+# .htaccess) here, relative to this directory. These files are copied
+# directly to the root of the documentation.
+# html_extra_path = []
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+# html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+# html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+# html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+# html_additional_pages = {}
+
+# If false, no module index is generated.
+# html_domain_indices = True
+
+# If false, no index is generated.
+# html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+# html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+# html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
+# html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
+# html_show_copyright = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a tag referring to it. The value of this option must be the
+# base URL from which the finished HTML is served.
+# html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+# html_file_suffix = None
+
+# Language to be used for generating the HTML full-text search index.
+# Sphinx supports the following languages:
+# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
+# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
+# html_search_language = 'en'
+
+# A dictionary with options for the search language support, empty by default.
+# Now only 'ja' uses this config value
+# html_search_options = {'type': 'default'}
+
+# The name of a javascript file (relative to the configuration directory) that
+# implements a search results scorer. If empty, the default will be used.
+# html_search_scorer = 'scorer.js'
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = "google-cloud-webrisk-doc"
+
+# -- Options for warnings ------------------------------------------------------
+
+
+suppress_warnings = [
+ # Temporarily suppress this to avoid "more than one target found for
+ # cross-reference" warning, which are intractable for us to avoid while in
+ # a mono-repo.
+ # See https://github.com/sphinx-doc/sphinx/blob
+ # /2a65ffeef5c107c19084fabdd706cdff3f52d93c/sphinx/domains/python.py#L843
+ "ref.python"
+]
+
+# -- Options for LaTeX output ---------------------------------------------
+
+latex_elements = {
+ # The paper size ('letterpaper' or 'a4paper').
+ # 'papersize': 'letterpaper',
+ # The font size ('10pt', '11pt' or '12pt').
+ # 'pointsize': '10pt',
+ # Additional stuff for the LaTeX preamble.
+ # 'preamble': '',
+ # Latex figure (float) alignment
+ # 'figure_align': 'htbp',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title,
+# author, documentclass [howto, manual, or own class]).
+latex_documents = [
+ (
+ master_doc,
+ "google-cloud-webrisk.tex",
+ u"google-cloud-webrisk Documentation",
+ author,
+ "manual",
+ )
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+# latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+# latex_use_parts = False
+
+# If true, show page references after internal links.
+# latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+# latex_show_urls = False
+
+# Documents to append as an appendix to all manuals.
+# latex_appendices = []
+
+# If false, no module index is generated.
+# latex_domain_indices = True
+
+
+# -- Options for manual page output ---------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+ (
+ master_doc,
+ "google-cloud-webrisk",
+ u"Google Cloud Webrisk Documentation",
+ [author],
+ 1,
+ )
+]
+
+# If true, show URL addresses after external links.
+# man_show_urls = False
+
+
+# -- Options for Texinfo output -------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+# dir menu entry, description, category)
+texinfo_documents = [
+ (
+ master_doc,
+ "google-cloud-webrisk",
+ u"google-cloud-webrisk Documentation",
+ author,
+ "google-cloud-webrisk",
+ "GAPIC library for Google Cloud Webrisk API",
+ "APIs",
+ )
+]
+
+# Documents to append as an appendix to all manuals.
+# texinfo_appendices = []
+
+# If false, no module index is generated.
+# texinfo_domain_indices = True
+
+# How to display URL addresses: 'footnote', 'no', or 'inline'.
+# texinfo_show_urls = 'footnote'
+
+# If true, do not generate a @detailmenu in the "Top" node's menu.
+# texinfo_no_detailmenu = False
+
+
+# Example configuration for intersphinx: refer to the Python standard library.
+intersphinx_mapping = {
+ "python": ("http://python.readthedocs.org/en/latest/", None),
+ "gax": ("https://gax-python.readthedocs.org/en/latest/", None),
+ "google-auth": ("https://google-auth.readthedocs.io/en/stable", None),
+ "google-gax": ("https://gax-python.readthedocs.io/en/latest/", None),
+ "google.api_core": ("https://googleapis.dev/python/google-api-core/latest/", None),
+ "grpc": ("https://grpc.io/grpc/python/", None),
+ "requests": ("http://requests.kennethreitz.org/en/stable/", None),
+ "proto": ("https://proto-plus-python.readthedocs.io/en/stable", None),
+ "protobuf": ("https://googleapis.dev/python/protobuf/latest/", None),
+}
+
+
+# Napoleon settings
+napoleon_google_docstring = True
+napoleon_numpy_docstring = True
+napoleon_include_private_with_doc = False
+napoleon_include_special_with_doc = True
+napoleon_use_admonition_for_examples = False
+napoleon_use_admonition_for_notes = False
+napoleon_use_admonition_for_references = False
+napoleon_use_ivar = False
+napoleon_use_param = True
+napoleon_use_rtype = True
diff --git a/owl-bot-staging/v1beta1/docs/index.rst b/owl-bot-staging/v1beta1/docs/index.rst
new file mode 100644
index 0000000..74d4aaa
--- /dev/null
+++ b/owl-bot-staging/v1beta1/docs/index.rst
@@ -0,0 +1,7 @@
+API Reference
+-------------
+.. toctree::
+ :maxdepth: 2
+
+ webrisk_v1beta1/services
+ webrisk_v1beta1/types
diff --git a/owl-bot-staging/v1beta1/docs/webrisk_v1beta1/services.rst b/owl-bot-staging/v1beta1/docs/webrisk_v1beta1/services.rst
new file mode 100644
index 0000000..19a06a3
--- /dev/null
+++ b/owl-bot-staging/v1beta1/docs/webrisk_v1beta1/services.rst
@@ -0,0 +1,6 @@
+Services for Google Cloud Webrisk v1beta1 API
+=============================================
+.. toctree::
+ :maxdepth: 2
+
+ web_risk_service_v1_beta1
diff --git a/owl-bot-staging/v1beta1/docs/webrisk_v1beta1/types.rst b/owl-bot-staging/v1beta1/docs/webrisk_v1beta1/types.rst
new file mode 100644
index 0000000..440fe29
--- /dev/null
+++ b/owl-bot-staging/v1beta1/docs/webrisk_v1beta1/types.rst
@@ -0,0 +1,7 @@
+Types for Google Cloud Webrisk v1beta1 API
+==========================================
+
+.. automodule:: google.cloud.webrisk_v1beta1.types
+ :members:
+ :undoc-members:
+ :show-inheritance:
diff --git a/owl-bot-staging/v1beta1/docs/webrisk_v1beta1/web_risk_service_v1_beta1.rst b/owl-bot-staging/v1beta1/docs/webrisk_v1beta1/web_risk_service_v1_beta1.rst
new file mode 100644
index 0000000..aea23da
--- /dev/null
+++ b/owl-bot-staging/v1beta1/docs/webrisk_v1beta1/web_risk_service_v1_beta1.rst
@@ -0,0 +1,6 @@
+WebRiskServiceV1Beta1
+---------------------------------------
+
+.. automodule:: google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1
+ :members:
+ :inherited-members:
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk/__init__.py b/owl-bot-staging/v1beta1/google/cloud/webrisk/__init__.py
new file mode 100644
index 0000000..7fc599e
--- /dev/null
+++ b/owl-bot-staging/v1beta1/google/cloud/webrisk/__init__.py
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+from google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1.client import WebRiskServiceV1Beta1Client
+from google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1.async_client import WebRiskServiceV1Beta1AsyncClient
+
+from google.cloud.webrisk_v1beta1.types.webrisk import ComputeThreatListDiffRequest
+from google.cloud.webrisk_v1beta1.types.webrisk import ComputeThreatListDiffResponse
+from google.cloud.webrisk_v1beta1.types.webrisk import RawHashes
+from google.cloud.webrisk_v1beta1.types.webrisk import RawIndices
+from google.cloud.webrisk_v1beta1.types.webrisk import RiceDeltaEncoding
+from google.cloud.webrisk_v1beta1.types.webrisk import SearchHashesRequest
+from google.cloud.webrisk_v1beta1.types.webrisk import SearchHashesResponse
+from google.cloud.webrisk_v1beta1.types.webrisk import SearchUrisRequest
+from google.cloud.webrisk_v1beta1.types.webrisk import SearchUrisResponse
+from google.cloud.webrisk_v1beta1.types.webrisk import ThreatEntryAdditions
+from google.cloud.webrisk_v1beta1.types.webrisk import ThreatEntryRemovals
+from google.cloud.webrisk_v1beta1.types.webrisk import CompressionType
+from google.cloud.webrisk_v1beta1.types.webrisk import ThreatType
+
+__all__ = ('WebRiskServiceV1Beta1Client',
+ 'WebRiskServiceV1Beta1AsyncClient',
+ 'ComputeThreatListDiffRequest',
+ 'ComputeThreatListDiffResponse',
+ 'RawHashes',
+ 'RawIndices',
+ 'RiceDeltaEncoding',
+ 'SearchHashesRequest',
+ 'SearchHashesResponse',
+ 'SearchUrisRequest',
+ 'SearchUrisResponse',
+ 'ThreatEntryAdditions',
+ 'ThreatEntryRemovals',
+ 'CompressionType',
+ 'ThreatType',
+)
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk/py.typed b/owl-bot-staging/v1beta1/google/cloud/webrisk/py.typed
new file mode 100644
index 0000000..bef3da1
--- /dev/null
+++ b/owl-bot-staging/v1beta1/google/cloud/webrisk/py.typed
@@ -0,0 +1,2 @@
+# Marker file for PEP 561.
+# The google-cloud-webrisk package uses inline types.
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/__init__.py b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/__init__.py
new file mode 100644
index 0000000..69a3488
--- /dev/null
+++ b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/__init__.py
@@ -0,0 +1,50 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+from .services.web_risk_service_v1_beta1 import WebRiskServiceV1Beta1Client
+from .services.web_risk_service_v1_beta1 import WebRiskServiceV1Beta1AsyncClient
+
+from .types.webrisk import ComputeThreatListDiffRequest
+from .types.webrisk import ComputeThreatListDiffResponse
+from .types.webrisk import RawHashes
+from .types.webrisk import RawIndices
+from .types.webrisk import RiceDeltaEncoding
+from .types.webrisk import SearchHashesRequest
+from .types.webrisk import SearchHashesResponse
+from .types.webrisk import SearchUrisRequest
+from .types.webrisk import SearchUrisResponse
+from .types.webrisk import ThreatEntryAdditions
+from .types.webrisk import ThreatEntryRemovals
+from .types.webrisk import CompressionType
+from .types.webrisk import ThreatType
+
+__all__ = (
+ 'WebRiskServiceV1Beta1AsyncClient',
+'CompressionType',
+'ComputeThreatListDiffRequest',
+'ComputeThreatListDiffResponse',
+'RawHashes',
+'RawIndices',
+'RiceDeltaEncoding',
+'SearchHashesRequest',
+'SearchHashesResponse',
+'SearchUrisRequest',
+'SearchUrisResponse',
+'ThreatEntryAdditions',
+'ThreatEntryRemovals',
+'ThreatType',
+'WebRiskServiceV1Beta1Client',
+)
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/gapic_metadata.json b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/gapic_metadata.json
new file mode 100644
index 0000000..64df094
--- /dev/null
+++ b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/gapic_metadata.json
@@ -0,0 +1,53 @@
+ {
+ "comment": "This file maps proto services/RPCs to the corresponding library clients/methods",
+ "language": "python",
+ "libraryPackage": "google.cloud.webrisk_v1beta1",
+ "protoPackage": "google.cloud.webrisk.v1beta1",
+ "schema": "1.0",
+ "services": {
+ "WebRiskServiceV1Beta1": {
+ "clients": {
+ "grpc": {
+ "libraryClient": "WebRiskServiceV1Beta1Client",
+ "rpcs": {
+ "ComputeThreatListDiff": {
+ "methods": [
+ "compute_threat_list_diff"
+ ]
+ },
+ "SearchHashes": {
+ "methods": [
+ "search_hashes"
+ ]
+ },
+ "SearchUris": {
+ "methods": [
+ "search_uris"
+ ]
+ }
+ }
+ },
+ "grpc-async": {
+ "libraryClient": "WebRiskServiceV1Beta1AsyncClient",
+ "rpcs": {
+ "ComputeThreatListDiff": {
+ "methods": [
+ "compute_threat_list_diff"
+ ]
+ },
+ "SearchHashes": {
+ "methods": [
+ "search_hashes"
+ ]
+ },
+ "SearchUris": {
+ "methods": [
+ "search_uris"
+ ]
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/py.typed b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/py.typed
new file mode 100644
index 0000000..bef3da1
--- /dev/null
+++ b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/py.typed
@@ -0,0 +1,2 @@
+# Marker file for PEP 561.
+# The google-cloud-webrisk package uses inline types.
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/__init__.py b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/__init__.py
new file mode 100644
index 0000000..4de6597
--- /dev/null
+++ b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/__init__.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/__init__.py b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/__init__.py
new file mode 100644
index 0000000..1649c97
--- /dev/null
+++ b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+from .client import WebRiskServiceV1Beta1Client
+from .async_client import WebRiskServiceV1Beta1AsyncClient
+
+__all__ = (
+ 'WebRiskServiceV1Beta1Client',
+ 'WebRiskServiceV1Beta1AsyncClient',
+)
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/async_client.py b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/async_client.py
new file mode 100644
index 0000000..2777eba
--- /dev/null
+++ b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/async_client.py
@@ -0,0 +1,426 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+from collections import OrderedDict
+import functools
+import re
+from typing import Dict, Sequence, Tuple, Type, Union
+import pkg_resources
+
+import google.api_core.client_options as ClientOptions # type: ignore
+from google.api_core import exceptions as core_exceptions # type: ignore
+from google.api_core import gapic_v1 # type: ignore
+from google.api_core import retry as retries # type: ignore
+from google.auth import credentials as ga_credentials # type: ignore
+from google.oauth2 import service_account # type: ignore
+
+from google.cloud.webrisk_v1beta1.types import webrisk
+from google.protobuf import timestamp_pb2 # type: ignore
+from .transports.base import WebRiskServiceV1Beta1Transport, DEFAULT_CLIENT_INFO
+from .transports.grpc_asyncio import WebRiskServiceV1Beta1GrpcAsyncIOTransport
+from .client import WebRiskServiceV1Beta1Client
+
+
+class WebRiskServiceV1Beta1AsyncClient:
+ """Web Risk v1beta1 API defines an interface to detect malicious
+ URLs on your website and in client applications.
+ """
+
+ _client: WebRiskServiceV1Beta1Client
+
+ DEFAULT_ENDPOINT = WebRiskServiceV1Beta1Client.DEFAULT_ENDPOINT
+ DEFAULT_MTLS_ENDPOINT = WebRiskServiceV1Beta1Client.DEFAULT_MTLS_ENDPOINT
+
+ common_billing_account_path = staticmethod(WebRiskServiceV1Beta1Client.common_billing_account_path)
+ parse_common_billing_account_path = staticmethod(WebRiskServiceV1Beta1Client.parse_common_billing_account_path)
+ common_folder_path = staticmethod(WebRiskServiceV1Beta1Client.common_folder_path)
+ parse_common_folder_path = staticmethod(WebRiskServiceV1Beta1Client.parse_common_folder_path)
+ common_organization_path = staticmethod(WebRiskServiceV1Beta1Client.common_organization_path)
+ parse_common_organization_path = staticmethod(WebRiskServiceV1Beta1Client.parse_common_organization_path)
+ common_project_path = staticmethod(WebRiskServiceV1Beta1Client.common_project_path)
+ parse_common_project_path = staticmethod(WebRiskServiceV1Beta1Client.parse_common_project_path)
+ common_location_path = staticmethod(WebRiskServiceV1Beta1Client.common_location_path)
+ parse_common_location_path = staticmethod(WebRiskServiceV1Beta1Client.parse_common_location_path)
+
+ @classmethod
+ def from_service_account_info(cls, info: dict, *args, **kwargs):
+ """Creates an instance of this client using the provided credentials
+ info.
+
+ Args:
+ info (dict): The service account private key info.
+ args: Additional arguments to pass to the constructor.
+ kwargs: Additional arguments to pass to the constructor.
+
+ Returns:
+ WebRiskServiceV1Beta1AsyncClient: The constructed client.
+ """
+ return WebRiskServiceV1Beta1Client.from_service_account_info.__func__(WebRiskServiceV1Beta1AsyncClient, info, *args, **kwargs) # type: ignore
+
+ @classmethod
+ def from_service_account_file(cls, filename: str, *args, **kwargs):
+ """Creates an instance of this client using the provided credentials
+ file.
+
+ Args:
+ filename (str): The path to the service account private key json
+ file.
+ args: Additional arguments to pass to the constructor.
+ kwargs: Additional arguments to pass to the constructor.
+
+ Returns:
+ WebRiskServiceV1Beta1AsyncClient: The constructed client.
+ """
+ return WebRiskServiceV1Beta1Client.from_service_account_file.__func__(WebRiskServiceV1Beta1AsyncClient, filename, *args, **kwargs) # type: ignore
+
+ from_service_account_json = from_service_account_file
+
+ @property
+ def transport(self) -> WebRiskServiceV1Beta1Transport:
+ """Returns the transport used by the client instance.
+
+ Returns:
+ WebRiskServiceV1Beta1Transport: The transport used by the client instance.
+ """
+ return self._client.transport
+
+ get_transport_class = functools.partial(type(WebRiskServiceV1Beta1Client).get_transport_class, type(WebRiskServiceV1Beta1Client))
+
+ def __init__(self, *,
+ credentials: ga_credentials.Credentials = None,
+ transport: Union[str, WebRiskServiceV1Beta1Transport] = "grpc_asyncio",
+ client_options: ClientOptions = None,
+ client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
+ ) -> None:
+ """Instantiates the web risk service v1 beta1 client.
+
+ Args:
+ credentials (Optional[google.auth.credentials.Credentials]): The
+ authorization credentials to attach to requests. These
+ credentials identify the application to the service; if none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ transport (Union[str, ~.WebRiskServiceV1Beta1Transport]): The
+ transport to use. If set to None, a transport is chosen
+ automatically.
+ client_options (ClientOptions): Custom options for the client. It
+ won't take effect if a ``transport`` instance is provided.
+ (1) The ``api_endpoint`` property can be used to override the
+ default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT
+ environment variable can also be used to override the endpoint:
+ "always" (always use the default mTLS endpoint), "never" (always
+ use the default regular endpoint) and "auto" (auto switch to the
+ default mTLS endpoint if client certificate is present, this is
+ the default value). However, the ``api_endpoint`` property takes
+ precedence if provided.
+ (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable
+ is "true", then the ``client_cert_source`` property can be used
+ to provide client certificate for mutual TLS transport. If
+ not provided, the default SSL client certificate will be used if
+ present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not
+ set, no client certificate will be used.
+
+ Raises:
+ google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport
+ creation failed for any reason.
+ """
+ self._client = WebRiskServiceV1Beta1Client(
+ credentials=credentials,
+ transport=transport,
+ client_options=client_options,
+ client_info=client_info,
+
+ )
+
+ async def compute_threat_list_diff(self,
+ request: webrisk.ComputeThreatListDiffRequest = None,
+ *,
+ threat_type: webrisk.ThreatType = None,
+ version_token: bytes = None,
+ constraints: webrisk.ComputeThreatListDiffRequest.Constraints = None,
+ retry: retries.Retry = gapic_v1.method.DEFAULT,
+ timeout: float = None,
+ metadata: Sequence[Tuple[str, str]] = (),
+ ) -> webrisk.ComputeThreatListDiffResponse:
+ r"""Gets the most recent threat list diffs.
+
+ Args:
+ request (:class:`google.cloud.webrisk_v1beta1.types.ComputeThreatListDiffRequest`):
+ The request object. Describes an API diff request.
+ threat_type (:class:`google.cloud.webrisk_v1beta1.types.ThreatType`):
+ The ThreatList to update.
+ This corresponds to the ``threat_type`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ version_token (:class:`bytes`):
+ The current version token of the
+ client for the requested list (the
+ client version that was received from
+ the last successful diff).
+
+ This corresponds to the ``version_token`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ constraints (:class:`google.cloud.webrisk_v1beta1.types.ComputeThreatListDiffRequest.Constraints`):
+ Required. The constraints associated
+ with this request.
+
+ This corresponds to the ``constraints`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ should be retried.
+ timeout (float): The timeout for this request.
+ metadata (Sequence[Tuple[str, str]]): Strings which should be
+ sent along with the request as metadata.
+
+ Returns:
+ google.cloud.webrisk_v1beta1.types.ComputeThreatListDiffResponse:
+
+ """
+ # Create or coerce a protobuf request object.
+ # Sanity check: If we got a request object, we should *not* have
+ # gotten any keyword arguments that map to the request.
+ has_flattened_params = any([threat_type, version_token, constraints])
+ if request is not None and has_flattened_params:
+ raise ValueError("If the `request` argument is set, then none of "
+ "the individual field arguments should be set.")
+
+ request = webrisk.ComputeThreatListDiffRequest(request)
+
+ # If we have keyword arguments corresponding to fields on the
+ # request, apply these.
+ if threat_type is not None:
+ request.threat_type = threat_type
+ if version_token is not None:
+ request.version_token = version_token
+ if constraints is not None:
+ request.constraints = constraints
+
+ # Wrap the RPC method; this adds retry and timeout information,
+ # and friendly error handling.
+ rpc = gapic_v1.method_async.wrap_method(
+ self._client._transport.compute_threat_list_diff,
+ default_retry=retries.Retry(
+initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
+ core_exceptions.DeadlineExceeded,
+ core_exceptions.ServiceUnavailable,
+ ),
+ deadline=600.0,
+ ),
+ default_timeout=600.0,
+ client_info=DEFAULT_CLIENT_INFO,
+ )
+
+ # Send the request.
+ response = await rpc(
+ request,
+ retry=retry,
+ timeout=timeout,
+ metadata=metadata,
+ )
+
+ # Done; return the response.
+ return response
+
+ async def search_uris(self,
+ request: webrisk.SearchUrisRequest = None,
+ *,
+ uri: str = None,
+ threat_types: Sequence[webrisk.ThreatType] = None,
+ retry: retries.Retry = gapic_v1.method.DEFAULT,
+ timeout: float = None,
+ metadata: Sequence[Tuple[str, str]] = (),
+ ) -> webrisk.SearchUrisResponse:
+ r"""This method is used to check whether a URI is on a
+ given threatList.
+
+ Args:
+ request (:class:`google.cloud.webrisk_v1beta1.types.SearchUrisRequest`):
+ The request object. Request to check URI entries against
+ threatLists.
+ uri (:class:`str`):
+ Required. The URI to be checked for
+ matches.
+
+ This corresponds to the ``uri`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ threat_types (:class:`Sequence[google.cloud.webrisk_v1beta1.types.ThreatType]`):
+ Required. The ThreatLists to search
+ in.
+
+ This corresponds to the ``threat_types`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ should be retried.
+ timeout (float): The timeout for this request.
+ metadata (Sequence[Tuple[str, str]]): Strings which should be
+ sent along with the request as metadata.
+
+ Returns:
+ google.cloud.webrisk_v1beta1.types.SearchUrisResponse:
+
+ """
+ # Create or coerce a protobuf request object.
+ # Sanity check: If we got a request object, we should *not* have
+ # gotten any keyword arguments that map to the request.
+ has_flattened_params = any([uri, threat_types])
+ if request is not None and has_flattened_params:
+ raise ValueError("If the `request` argument is set, then none of "
+ "the individual field arguments should be set.")
+
+ request = webrisk.SearchUrisRequest(request)
+
+ # If we have keyword arguments corresponding to fields on the
+ # request, apply these.
+ if uri is not None:
+ request.uri = uri
+ if threat_types:
+ request.threat_types.extend(threat_types)
+
+ # Wrap the RPC method; this adds retry and timeout information,
+ # and friendly error handling.
+ rpc = gapic_v1.method_async.wrap_method(
+ self._client._transport.search_uris,
+ default_retry=retries.Retry(
+initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
+ core_exceptions.DeadlineExceeded,
+ core_exceptions.ServiceUnavailable,
+ ),
+ deadline=600.0,
+ ),
+ default_timeout=600.0,
+ client_info=DEFAULT_CLIENT_INFO,
+ )
+
+ # Send the request.
+ response = await rpc(
+ request,
+ retry=retry,
+ timeout=timeout,
+ metadata=metadata,
+ )
+
+ # Done; return the response.
+ return response
+
+ async def search_hashes(self,
+ request: webrisk.SearchHashesRequest = None,
+ *,
+ hash_prefix: bytes = None,
+ threat_types: Sequence[webrisk.ThreatType] = None,
+ retry: retries.Retry = gapic_v1.method.DEFAULT,
+ timeout: float = None,
+ metadata: Sequence[Tuple[str, str]] = (),
+ ) -> webrisk.SearchHashesResponse:
+ r"""Gets the full hashes that match the requested hash
+ prefix. This is used after a hash prefix is looked up in
+ a threatList and there is a match. The client side
+ threatList only holds partial hashes so the client must
+ query this method to determine if there is a full hash
+ match of a threat.
+
+ Args:
+ request (:class:`google.cloud.webrisk_v1beta1.types.SearchHashesRequest`):
+ The request object. Request to return full hashes
+ matched by the provided hash prefixes.
+ hash_prefix (:class:`bytes`):
+ A hash prefix, consisting of the most
+ significant 4-32 bytes of a SHA256 hash.
+ For JSON requests, this field is
+ base64-encoded.
+
+ This corresponds to the ``hash_prefix`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ threat_types (:class:`Sequence[google.cloud.webrisk_v1beta1.types.ThreatType]`):
+ Required. The ThreatLists to search
+ in.
+
+ This corresponds to the ``threat_types`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ should be retried.
+ timeout (float): The timeout for this request.
+ metadata (Sequence[Tuple[str, str]]): Strings which should be
+ sent along with the request as metadata.
+
+ Returns:
+ google.cloud.webrisk_v1beta1.types.SearchHashesResponse:
+
+ """
+ # Create or coerce a protobuf request object.
+ # Sanity check: If we got a request object, we should *not* have
+ # gotten any keyword arguments that map to the request.
+ has_flattened_params = any([hash_prefix, threat_types])
+ if request is not None and has_flattened_params:
+ raise ValueError("If the `request` argument is set, then none of "
+ "the individual field arguments should be set.")
+
+ request = webrisk.SearchHashesRequest(request)
+
+ # If we have keyword arguments corresponding to fields on the
+ # request, apply these.
+ if hash_prefix is not None:
+ request.hash_prefix = hash_prefix
+ if threat_types:
+ request.threat_types.extend(threat_types)
+
+ # Wrap the RPC method; this adds retry and timeout information,
+ # and friendly error handling.
+ rpc = gapic_v1.method_async.wrap_method(
+ self._client._transport.search_hashes,
+ default_retry=retries.Retry(
+initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
+ core_exceptions.DeadlineExceeded,
+ core_exceptions.ServiceUnavailable,
+ ),
+ deadline=600.0,
+ ),
+ default_timeout=600.0,
+ client_info=DEFAULT_CLIENT_INFO,
+ )
+
+ # Send the request.
+ response = await rpc(
+ request,
+ retry=retry,
+ timeout=timeout,
+ metadata=metadata,
+ )
+
+ # Done; return the response.
+ return response
+
+
+
+
+
+try:
+ DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(
+ gapic_version=pkg_resources.get_distribution(
+ "google-cloud-webrisk",
+ ).version,
+ )
+except pkg_resources.DistributionNotFound:
+ DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo()
+
+
+__all__ = (
+ "WebRiskServiceV1Beta1AsyncClient",
+)
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/client.py b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/client.py
new file mode 100644
index 0000000..ccfc5f8
--- /dev/null
+++ b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/client.py
@@ -0,0 +1,583 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+from collections import OrderedDict
+from distutils import util
+import os
+import re
+from typing import Callable, Dict, Optional, Sequence, Tuple, Type, Union
+import pkg_resources
+
+from google.api_core import client_options as client_options_lib # type: ignore
+from google.api_core import exceptions as core_exceptions # type: ignore
+from google.api_core import gapic_v1 # type: ignore
+from google.api_core import retry as retries # type: ignore
+from google.auth import credentials as ga_credentials # type: ignore
+from google.auth.transport import mtls # type: ignore
+from google.auth.transport.grpc import SslCredentials # type: ignore
+from google.auth.exceptions import MutualTLSChannelError # type: ignore
+from google.oauth2 import service_account # type: ignore
+
+from google.cloud.webrisk_v1beta1.types import webrisk
+from google.protobuf import timestamp_pb2 # type: ignore
+from .transports.base import WebRiskServiceV1Beta1Transport, DEFAULT_CLIENT_INFO
+from .transports.grpc import WebRiskServiceV1Beta1GrpcTransport
+from .transports.grpc_asyncio import WebRiskServiceV1Beta1GrpcAsyncIOTransport
+
+
+class WebRiskServiceV1Beta1ClientMeta(type):
+ """Metaclass for the WebRiskServiceV1Beta1 client.
+
+ This provides class-level methods for building and retrieving
+ support objects (e.g. transport) without polluting the client instance
+ objects.
+ """
+ _transport_registry = OrderedDict() # type: Dict[str, Type[WebRiskServiceV1Beta1Transport]]
+ _transport_registry["grpc"] = WebRiskServiceV1Beta1GrpcTransport
+ _transport_registry["grpc_asyncio"] = WebRiskServiceV1Beta1GrpcAsyncIOTransport
+
+ def get_transport_class(cls,
+ label: str = None,
+ ) -> Type[WebRiskServiceV1Beta1Transport]:
+ """Returns an appropriate transport class.
+
+ Args:
+ label: The name of the desired transport. If none is
+ provided, then the first transport in the registry is used.
+
+ Returns:
+ The transport class to use.
+ """
+ # If a specific transport is requested, return that one.
+ if label:
+ return cls._transport_registry[label]
+
+ # No transport is requested; return the default (that is, the first one
+ # in the dictionary).
+ return next(iter(cls._transport_registry.values()))
+
+
+class WebRiskServiceV1Beta1Client(metaclass=WebRiskServiceV1Beta1ClientMeta):
+ """Web Risk v1beta1 API defines an interface to detect malicious
+ URLs on your website and in client applications.
+ """
+
+ @staticmethod
+ def _get_default_mtls_endpoint(api_endpoint):
+ """Converts api endpoint to mTLS endpoint.
+
+ Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to
+ "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively.
+ Args:
+ api_endpoint (Optional[str]): the api endpoint to convert.
+ Returns:
+ str: converted mTLS api endpoint.
+ """
+ if not api_endpoint:
+ return api_endpoint
+
+ mtls_endpoint_re = re.compile(
+ r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?"
+ )
+
+ m = mtls_endpoint_re.match(api_endpoint)
+ name, mtls, sandbox, googledomain = m.groups()
+ if mtls or not googledomain:
+ return api_endpoint
+
+ if sandbox:
+ return api_endpoint.replace(
+ "sandbox.googleapis.com", "mtls.sandbox.googleapis.com"
+ )
+
+ return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com")
+
+ DEFAULT_ENDPOINT = "webrisk.googleapis.com"
+ DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore
+ DEFAULT_ENDPOINT
+ )
+
+ @classmethod
+ def from_service_account_info(cls, info: dict, *args, **kwargs):
+ """Creates an instance of this client using the provided credentials
+ info.
+
+ Args:
+ info (dict): The service account private key info.
+ args: Additional arguments to pass to the constructor.
+ kwargs: Additional arguments to pass to the constructor.
+
+ Returns:
+ WebRiskServiceV1Beta1Client: The constructed client.
+ """
+ credentials = service_account.Credentials.from_service_account_info(info)
+ kwargs["credentials"] = credentials
+ return cls(*args, **kwargs)
+
+ @classmethod
+ def from_service_account_file(cls, filename: str, *args, **kwargs):
+ """Creates an instance of this client using the provided credentials
+ file.
+
+ Args:
+ filename (str): The path to the service account private key json
+ file.
+ args: Additional arguments to pass to the constructor.
+ kwargs: Additional arguments to pass to the constructor.
+
+ Returns:
+ WebRiskServiceV1Beta1Client: The constructed client.
+ """
+ credentials = service_account.Credentials.from_service_account_file(
+ filename)
+ kwargs["credentials"] = credentials
+ return cls(*args, **kwargs)
+
+ from_service_account_json = from_service_account_file
+
+ @property
+ def transport(self) -> WebRiskServiceV1Beta1Transport:
+ """Returns the transport used by the client instance.
+
+ Returns:
+ WebRiskServiceV1Beta1Transport: The transport used by the client
+ instance.
+ """
+ return self._transport
+
+ @staticmethod
+ def common_billing_account_path(billing_account: str, ) -> str:
+ """Returns a fully-qualified billing_account string."""
+ return "billingAccounts/{billing_account}".format(billing_account=billing_account, )
+
+ @staticmethod
+ def parse_common_billing_account_path(path: str) -> Dict[str,str]:
+ """Parse a billing_account path into its component segments."""
+ m = re.match(r"^billingAccounts/(?P.+?)$", path)
+ return m.groupdict() if m else {}
+
+ @staticmethod
+ def common_folder_path(folder: str, ) -> str:
+ """Returns a fully-qualified folder string."""
+ return "folders/{folder}".format(folder=folder, )
+
+ @staticmethod
+ def parse_common_folder_path(path: str) -> Dict[str,str]:
+ """Parse a folder path into its component segments."""
+ m = re.match(r"^folders/(?P.+?)$", path)
+ return m.groupdict() if m else {}
+
+ @staticmethod
+ def common_organization_path(organization: str, ) -> str:
+ """Returns a fully-qualified organization string."""
+ return "organizations/{organization}".format(organization=organization, )
+
+ @staticmethod
+ def parse_common_organization_path(path: str) -> Dict[str,str]:
+ """Parse a organization path into its component segments."""
+ m = re.match(r"^organizations/(?P.+?)$", path)
+ return m.groupdict() if m else {}
+
+ @staticmethod
+ def common_project_path(project: str, ) -> str:
+ """Returns a fully-qualified project string."""
+ return "projects/{project}".format(project=project, )
+
+ @staticmethod
+ def parse_common_project_path(path: str) -> Dict[str,str]:
+ """Parse a project path into its component segments."""
+ m = re.match(r"^projects/(?P.+?)$", path)
+ return m.groupdict() if m else {}
+
+ @staticmethod
+ def common_location_path(project: str, location: str, ) -> str:
+ """Returns a fully-qualified location string."""
+ return "projects/{project}/locations/{location}".format(project=project, location=location, )
+
+ @staticmethod
+ def parse_common_location_path(path: str) -> Dict[str,str]:
+ """Parse a location path into its component segments."""
+ m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path)
+ return m.groupdict() if m else {}
+
+ def __init__(self, *,
+ credentials: Optional[ga_credentials.Credentials] = None,
+ transport: Union[str, WebRiskServiceV1Beta1Transport, None] = None,
+ client_options: Optional[client_options_lib.ClientOptions] = None,
+ client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
+ ) -> None:
+ """Instantiates the web risk service v1 beta1 client.
+
+ Args:
+ credentials (Optional[google.auth.credentials.Credentials]): The
+ authorization credentials to attach to requests. These
+ credentials identify the application to the service; if none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ transport (Union[str, WebRiskServiceV1Beta1Transport]): The
+ transport to use. If set to None, a transport is chosen
+ automatically.
+ client_options (google.api_core.client_options.ClientOptions): Custom options for the
+ client. It won't take effect if a ``transport`` instance is provided.
+ (1) The ``api_endpoint`` property can be used to override the
+ default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT
+ environment variable can also be used to override the endpoint:
+ "always" (always use the default mTLS endpoint), "never" (always
+ use the default regular endpoint) and "auto" (auto switch to the
+ default mTLS endpoint if client certificate is present, this is
+ the default value). However, the ``api_endpoint`` property takes
+ precedence if provided.
+ (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable
+ is "true", then the ``client_cert_source`` property can be used
+ to provide client certificate for mutual TLS transport. If
+ not provided, the default SSL client certificate will be used if
+ present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not
+ set, no client certificate will be used.
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
+ The client info used to send a user-agent string along with
+ API requests. If ``None``, then default info will be used.
+ Generally, you only need to set this if you're developing
+ your own client library.
+
+ Raises:
+ google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport
+ creation failed for any reason.
+ """
+ if isinstance(client_options, dict):
+ client_options = client_options_lib.from_dict(client_options)
+ if client_options is None:
+ client_options = client_options_lib.ClientOptions()
+
+ # Create SSL credentials for mutual TLS if needed.
+ use_client_cert = bool(util.strtobool(os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false")))
+
+ client_cert_source_func = None
+ is_mtls = False
+ if use_client_cert:
+ if client_options.client_cert_source:
+ is_mtls = True
+ client_cert_source_func = client_options.client_cert_source
+ else:
+ is_mtls = mtls.has_default_client_cert_source()
+ if is_mtls:
+ client_cert_source_func = mtls.default_client_cert_source()
+ else:
+ client_cert_source_func = None
+
+ # Figure out which api endpoint to use.
+ if client_options.api_endpoint is not None:
+ api_endpoint = client_options.api_endpoint
+ else:
+ use_mtls_env = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto")
+ if use_mtls_env == "never":
+ api_endpoint = self.DEFAULT_ENDPOINT
+ elif use_mtls_env == "always":
+ api_endpoint = self.DEFAULT_MTLS_ENDPOINT
+ elif use_mtls_env == "auto":
+ if is_mtls:
+ api_endpoint = self.DEFAULT_MTLS_ENDPOINT
+ else:
+ api_endpoint = self.DEFAULT_ENDPOINT
+ else:
+ raise MutualTLSChannelError(
+ "Unsupported GOOGLE_API_USE_MTLS_ENDPOINT value. Accepted "
+ "values: never, auto, always"
+ )
+
+ # Save or instantiate the transport.
+ # Ordinarily, we provide the transport, but allowing a custom transport
+ # instance provides an extensibility point for unusual situations.
+ if isinstance(transport, WebRiskServiceV1Beta1Transport):
+ # transport is a WebRiskServiceV1Beta1Transport instance.
+ if credentials or client_options.credentials_file:
+ raise ValueError("When providing a transport instance, "
+ "provide its credentials directly.")
+ if client_options.scopes:
+ raise ValueError(
+ "When providing a transport instance, provide its scopes "
+ "directly."
+ )
+ self._transport = transport
+ else:
+ Transport = type(self).get_transport_class(transport)
+ self._transport = Transport(
+ credentials=credentials,
+ credentials_file=client_options.credentials_file,
+ host=api_endpoint,
+ scopes=client_options.scopes,
+ client_cert_source_for_mtls=client_cert_source_func,
+ quota_project_id=client_options.quota_project_id,
+ client_info=client_info,
+ )
+
+ def compute_threat_list_diff(self,
+ request: webrisk.ComputeThreatListDiffRequest = None,
+ *,
+ threat_type: webrisk.ThreatType = None,
+ version_token: bytes = None,
+ constraints: webrisk.ComputeThreatListDiffRequest.Constraints = None,
+ retry: retries.Retry = gapic_v1.method.DEFAULT,
+ timeout: float = None,
+ metadata: Sequence[Tuple[str, str]] = (),
+ ) -> webrisk.ComputeThreatListDiffResponse:
+ r"""Gets the most recent threat list diffs.
+
+ Args:
+ request (google.cloud.webrisk_v1beta1.types.ComputeThreatListDiffRequest):
+ The request object. Describes an API diff request.
+ threat_type (google.cloud.webrisk_v1beta1.types.ThreatType):
+ The ThreatList to update.
+ This corresponds to the ``threat_type`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ version_token (bytes):
+ The current version token of the
+ client for the requested list (the
+ client version that was received from
+ the last successful diff).
+
+ This corresponds to the ``version_token`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ constraints (google.cloud.webrisk_v1beta1.types.ComputeThreatListDiffRequest.Constraints):
+ Required. The constraints associated
+ with this request.
+
+ This corresponds to the ``constraints`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ should be retried.
+ timeout (float): The timeout for this request.
+ metadata (Sequence[Tuple[str, str]]): Strings which should be
+ sent along with the request as metadata.
+
+ Returns:
+ google.cloud.webrisk_v1beta1.types.ComputeThreatListDiffResponse:
+
+ """
+ # Create or coerce a protobuf request object.
+ # Sanity check: If we got a request object, we should *not* have
+ # gotten any keyword arguments that map to the request.
+ has_flattened_params = any([threat_type, version_token, constraints])
+ if request is not None and has_flattened_params:
+ raise ValueError('If the `request` argument is set, then none of '
+ 'the individual field arguments should be set.')
+
+ # Minor optimization to avoid making a copy if the user passes
+ # in a webrisk.ComputeThreatListDiffRequest.
+ # There's no risk of modifying the input as we've already verified
+ # there are no flattened fields.
+ if not isinstance(request, webrisk.ComputeThreatListDiffRequest):
+ request = webrisk.ComputeThreatListDiffRequest(request)
+ # If we have keyword arguments corresponding to fields on the
+ # request, apply these.
+ if threat_type is not None:
+ request.threat_type = threat_type
+ if version_token is not None:
+ request.version_token = version_token
+ if constraints is not None:
+ request.constraints = constraints
+
+ # Wrap the RPC method; this adds retry and timeout information,
+ # and friendly error handling.
+ rpc = self._transport._wrapped_methods[self._transport.compute_threat_list_diff]
+
+ # Send the request.
+ response = rpc(
+ request,
+ retry=retry,
+ timeout=timeout,
+ metadata=metadata,
+ )
+
+ # Done; return the response.
+ return response
+
+ def search_uris(self,
+ request: webrisk.SearchUrisRequest = None,
+ *,
+ uri: str = None,
+ threat_types: Sequence[webrisk.ThreatType] = None,
+ retry: retries.Retry = gapic_v1.method.DEFAULT,
+ timeout: float = None,
+ metadata: Sequence[Tuple[str, str]] = (),
+ ) -> webrisk.SearchUrisResponse:
+ r"""This method is used to check whether a URI is on a
+ given threatList.
+
+ Args:
+ request (google.cloud.webrisk_v1beta1.types.SearchUrisRequest):
+ The request object. Request to check URI entries against
+ threatLists.
+ uri (str):
+ Required. The URI to be checked for
+ matches.
+
+ This corresponds to the ``uri`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ threat_types (Sequence[google.cloud.webrisk_v1beta1.types.ThreatType]):
+ Required. The ThreatLists to search
+ in.
+
+ This corresponds to the ``threat_types`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ should be retried.
+ timeout (float): The timeout for this request.
+ metadata (Sequence[Tuple[str, str]]): Strings which should be
+ sent along with the request as metadata.
+
+ Returns:
+ google.cloud.webrisk_v1beta1.types.SearchUrisResponse:
+
+ """
+ # Create or coerce a protobuf request object.
+ # Sanity check: If we got a request object, we should *not* have
+ # gotten any keyword arguments that map to the request.
+ has_flattened_params = any([uri, threat_types])
+ if request is not None and has_flattened_params:
+ raise ValueError('If the `request` argument is set, then none of '
+ 'the individual field arguments should be set.')
+
+ # Minor optimization to avoid making a copy if the user passes
+ # in a webrisk.SearchUrisRequest.
+ # There's no risk of modifying the input as we've already verified
+ # there are no flattened fields.
+ if not isinstance(request, webrisk.SearchUrisRequest):
+ request = webrisk.SearchUrisRequest(request)
+ # If we have keyword arguments corresponding to fields on the
+ # request, apply these.
+ if uri is not None:
+ request.uri = uri
+ if threat_types is not None:
+ request.threat_types = threat_types
+
+ # Wrap the RPC method; this adds retry and timeout information,
+ # and friendly error handling.
+ rpc = self._transport._wrapped_methods[self._transport.search_uris]
+
+ # Send the request.
+ response = rpc(
+ request,
+ retry=retry,
+ timeout=timeout,
+ metadata=metadata,
+ )
+
+ # Done; return the response.
+ return response
+
+ def search_hashes(self,
+ request: webrisk.SearchHashesRequest = None,
+ *,
+ hash_prefix: bytes = None,
+ threat_types: Sequence[webrisk.ThreatType] = None,
+ retry: retries.Retry = gapic_v1.method.DEFAULT,
+ timeout: float = None,
+ metadata: Sequence[Tuple[str, str]] = (),
+ ) -> webrisk.SearchHashesResponse:
+ r"""Gets the full hashes that match the requested hash
+ prefix. This is used after a hash prefix is looked up in
+ a threatList and there is a match. The client side
+ threatList only holds partial hashes so the client must
+ query this method to determine if there is a full hash
+ match of a threat.
+
+ Args:
+ request (google.cloud.webrisk_v1beta1.types.SearchHashesRequest):
+ The request object. Request to return full hashes
+ matched by the provided hash prefixes.
+ hash_prefix (bytes):
+ A hash prefix, consisting of the most
+ significant 4-32 bytes of a SHA256 hash.
+ For JSON requests, this field is
+ base64-encoded.
+
+ This corresponds to the ``hash_prefix`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ threat_types (Sequence[google.cloud.webrisk_v1beta1.types.ThreatType]):
+ Required. The ThreatLists to search
+ in.
+
+ This corresponds to the ``threat_types`` field
+ on the ``request`` instance; if ``request`` is provided, this
+ should not be set.
+ retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ should be retried.
+ timeout (float): The timeout for this request.
+ metadata (Sequence[Tuple[str, str]]): Strings which should be
+ sent along with the request as metadata.
+
+ Returns:
+ google.cloud.webrisk_v1beta1.types.SearchHashesResponse:
+
+ """
+ # Create or coerce a protobuf request object.
+ # Sanity check: If we got a request object, we should *not* have
+ # gotten any keyword arguments that map to the request.
+ has_flattened_params = any([hash_prefix, threat_types])
+ if request is not None and has_flattened_params:
+ raise ValueError('If the `request` argument is set, then none of '
+ 'the individual field arguments should be set.')
+
+ # Minor optimization to avoid making a copy if the user passes
+ # in a webrisk.SearchHashesRequest.
+ # There's no risk of modifying the input as we've already verified
+ # there are no flattened fields.
+ if not isinstance(request, webrisk.SearchHashesRequest):
+ request = webrisk.SearchHashesRequest(request)
+ # If we have keyword arguments corresponding to fields on the
+ # request, apply these.
+ if hash_prefix is not None:
+ request.hash_prefix = hash_prefix
+ if threat_types is not None:
+ request.threat_types = threat_types
+
+ # Wrap the RPC method; this adds retry and timeout information,
+ # and friendly error handling.
+ rpc = self._transport._wrapped_methods[self._transport.search_hashes]
+
+ # Send the request.
+ response = rpc(
+ request,
+ retry=retry,
+ timeout=timeout,
+ metadata=metadata,
+ )
+
+ # Done; return the response.
+ return response
+
+
+
+
+
+try:
+ DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(
+ gapic_version=pkg_resources.get_distribution(
+ "google-cloud-webrisk",
+ ).version,
+ )
+except pkg_resources.DistributionNotFound:
+ DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo()
+
+
+__all__ = (
+ "WebRiskServiceV1Beta1Client",
+)
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/__init__.py b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/__init__.py
new file mode 100644
index 0000000..aaee65b
--- /dev/null
+++ b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/__init__.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+from collections import OrderedDict
+from typing import Dict, Type
+
+from .base import WebRiskServiceV1Beta1Transport
+from .grpc import WebRiskServiceV1Beta1GrpcTransport
+from .grpc_asyncio import WebRiskServiceV1Beta1GrpcAsyncIOTransport
+
+
+# Compile a registry of transports.
+_transport_registry = OrderedDict() # type: Dict[str, Type[WebRiskServiceV1Beta1Transport]]
+_transport_registry['grpc'] = WebRiskServiceV1Beta1GrpcTransport
+_transport_registry['grpc_asyncio'] = WebRiskServiceV1Beta1GrpcAsyncIOTransport
+
+__all__ = (
+ 'WebRiskServiceV1Beta1Transport',
+ 'WebRiskServiceV1Beta1GrpcTransport',
+ 'WebRiskServiceV1Beta1GrpcAsyncIOTransport',
+)
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/base.py b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/base.py
new file mode 100644
index 0000000..5edb5af
--- /dev/null
+++ b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/base.py
@@ -0,0 +1,217 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+import abc
+from typing import Awaitable, Callable, Dict, Optional, Sequence, Union
+import packaging.version
+import pkg_resources
+
+import google.auth # type: ignore
+import google.api_core # type: ignore
+from google.api_core import exceptions as core_exceptions # type: ignore
+from google.api_core import gapic_v1 # type: ignore
+from google.api_core import retry as retries # type: ignore
+from google.auth import credentials as ga_credentials # type: ignore
+from google.oauth2 import service_account # type: ignore
+
+from google.cloud.webrisk_v1beta1.types import webrisk
+
+try:
+ DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(
+ gapic_version=pkg_resources.get_distribution(
+ 'google-cloud-webrisk',
+ ).version,
+ )
+except pkg_resources.DistributionNotFound:
+ DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo()
+
+try:
+ # google.auth.__version__ was added in 1.26.0
+ _GOOGLE_AUTH_VERSION = google.auth.__version__
+except AttributeError:
+ try: # try pkg_resources if it is available
+ _GOOGLE_AUTH_VERSION = pkg_resources.get_distribution("google-auth").version
+ except pkg_resources.DistributionNotFound: # pragma: NO COVER
+ _GOOGLE_AUTH_VERSION = None
+
+
+class WebRiskServiceV1Beta1Transport(abc.ABC):
+ """Abstract transport class for WebRiskServiceV1Beta1."""
+
+ AUTH_SCOPES = (
+ 'https://www.googleapis.com/auth/cloud-platform',
+ )
+
+ DEFAULT_HOST: str = 'webrisk.googleapis.com'
+ def __init__(
+ self, *,
+ host: str = DEFAULT_HOST,
+ credentials: ga_credentials.Credentials = None,
+ credentials_file: Optional[str] = None,
+ scopes: Optional[Sequence[str]] = None,
+ quota_project_id: Optional[str] = None,
+ client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
+ always_use_jwt_access: Optional[bool] = False,
+ **kwargs,
+ ) -> None:
+ """Instantiate the transport.
+
+ Args:
+ host (Optional[str]):
+ The hostname to connect to.
+ credentials (Optional[google.auth.credentials.Credentials]): The
+ authorization credentials to attach to requests. These
+ credentials identify the application to the service; if none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ credentials_file (Optional[str]): A file with credentials that can
+ be loaded with :func:`google.auth.load_credentials_from_file`.
+ This argument is mutually exclusive with credentials.
+ scopes (Optional[Sequence[str]]): A list of scopes.
+ quota_project_id (Optional[str]): An optional project to use for billing
+ and quota.
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
+ The client info used to send a user-agent string along with
+ API requests. If ``None``, then default info will be used.
+ Generally, you only need to set this if you're developing
+ your own client library.
+ always_use_jwt_access (Optional[bool]): Whether self signed JWT should
+ be used for service account credentials.
+ """
+ # Save the hostname. Default to port 443 (HTTPS) if none is specified.
+ if ':' not in host:
+ host += ':443'
+ self._host = host
+
+ scopes_kwargs = self._get_scopes_kwargs(self._host, scopes)
+
+ # Save the scopes.
+ self._scopes = scopes
+
+ # If no credentials are provided, then determine the appropriate
+ # defaults.
+ if credentials and credentials_file:
+ raise core_exceptions.DuplicateCredentialArgs("'credentials_file' and 'credentials' are mutually exclusive")
+
+ if credentials_file is not None:
+ credentials, _ = google.auth.load_credentials_from_file(
+ credentials_file,
+ **scopes_kwargs,
+ quota_project_id=quota_project_id
+ )
+
+ elif credentials is None:
+ credentials, _ = google.auth.default(**scopes_kwargs, quota_project_id=quota_project_id)
+
+ # If the credentials is service account credentials, then always try to use self signed JWT.
+ if always_use_jwt_access and isinstance(credentials, service_account.Credentials) and hasattr(service_account.Credentials, "with_always_use_jwt_access"):
+ credentials = credentials.with_always_use_jwt_access(True)
+
+ # Save the credentials.
+ self._credentials = credentials
+
+ # TODO(busunkim): This method is in the base transport
+ # to avoid duplicating code across the transport classes. These functions
+ # should be deleted once the minimum required versions of google-auth is increased.
+
+ # TODO: Remove this function once google-auth >= 1.25.0 is required
+ @classmethod
+ def _get_scopes_kwargs(cls, host: str, scopes: Optional[Sequence[str]]) -> Dict[str, Optional[Sequence[str]]]:
+ """Returns scopes kwargs to pass to google-auth methods depending on the google-auth version"""
+
+ scopes_kwargs = {}
+
+ if _GOOGLE_AUTH_VERSION and (
+ packaging.version.parse(_GOOGLE_AUTH_VERSION)
+ >= packaging.version.parse("1.25.0")
+ ):
+ scopes_kwargs = {"scopes": scopes, "default_scopes": cls.AUTH_SCOPES}
+ else:
+ scopes_kwargs = {"scopes": scopes or cls.AUTH_SCOPES}
+
+ return scopes_kwargs
+
+ def _prep_wrapped_messages(self, client_info):
+ # Precompute the wrapped methods.
+ self._wrapped_methods = {
+ self.compute_threat_list_diff: gapic_v1.method.wrap_method(
+ self.compute_threat_list_diff,
+ default_retry=retries.Retry(
+initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
+ core_exceptions.DeadlineExceeded,
+ core_exceptions.ServiceUnavailable,
+ ),
+ deadline=600.0,
+ ),
+ default_timeout=600.0,
+ client_info=client_info,
+ ),
+ self.search_uris: gapic_v1.method.wrap_method(
+ self.search_uris,
+ default_retry=retries.Retry(
+initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
+ core_exceptions.DeadlineExceeded,
+ core_exceptions.ServiceUnavailable,
+ ),
+ deadline=600.0,
+ ),
+ default_timeout=600.0,
+ client_info=client_info,
+ ),
+ self.search_hashes: gapic_v1.method.wrap_method(
+ self.search_hashes,
+ default_retry=retries.Retry(
+initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
+ core_exceptions.DeadlineExceeded,
+ core_exceptions.ServiceUnavailable,
+ ),
+ deadline=600.0,
+ ),
+ default_timeout=600.0,
+ client_info=client_info,
+ ),
+ }
+
+ @property
+ def compute_threat_list_diff(self) -> Callable[
+ [webrisk.ComputeThreatListDiffRequest],
+ Union[
+ webrisk.ComputeThreatListDiffResponse,
+ Awaitable[webrisk.ComputeThreatListDiffResponse]
+ ]]:
+ raise NotImplementedError()
+
+ @property
+ def search_uris(self) -> Callable[
+ [webrisk.SearchUrisRequest],
+ Union[
+ webrisk.SearchUrisResponse,
+ Awaitable[webrisk.SearchUrisResponse]
+ ]]:
+ raise NotImplementedError()
+
+ @property
+ def search_hashes(self) -> Callable[
+ [webrisk.SearchHashesRequest],
+ Union[
+ webrisk.SearchHashesResponse,
+ Awaitable[webrisk.SearchHashesResponse]
+ ]]:
+ raise NotImplementedError()
+
+
+__all__ = (
+ 'WebRiskServiceV1Beta1Transport',
+)
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc.py b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc.py
new file mode 100644
index 0000000..207474a
--- /dev/null
+++ b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc.py
@@ -0,0 +1,311 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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 warnings
+from typing import Callable, Dict, Optional, Sequence, Tuple, Union
+
+from google.api_core import grpc_helpers # type: ignore
+from google.api_core import gapic_v1 # type: ignore
+import google.auth # type: ignore
+from google.auth import credentials as ga_credentials # type: ignore
+from google.auth.transport.grpc import SslCredentials # type: ignore
+
+import grpc # type: ignore
+
+from google.cloud.webrisk_v1beta1.types import webrisk
+from .base import WebRiskServiceV1Beta1Transport, DEFAULT_CLIENT_INFO
+
+
+class WebRiskServiceV1Beta1GrpcTransport(WebRiskServiceV1Beta1Transport):
+ """gRPC backend transport for WebRiskServiceV1Beta1.
+
+ Web Risk v1beta1 API defines an interface to detect malicious
+ URLs on your website and in client applications.
+
+ This class defines the same methods as the primary client, so the
+ primary client can load the underlying transport implementation
+ and call it.
+
+ It sends protocol buffers over the wire using gRPC (which is built on
+ top of HTTP/2); the ``grpcio`` package must be installed.
+ """
+ _stubs: Dict[str, Callable]
+
+ def __init__(self, *,
+ host: str = 'webrisk.googleapis.com',
+ credentials: ga_credentials.Credentials = None,
+ credentials_file: str = None,
+ scopes: Sequence[str] = None,
+ channel: grpc.Channel = None,
+ api_mtls_endpoint: str = None,
+ client_cert_source: Callable[[], Tuple[bytes, bytes]] = None,
+ ssl_channel_credentials: grpc.ChannelCredentials = None,
+ client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None,
+ quota_project_id: Optional[str] = None,
+ client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
+ always_use_jwt_access: Optional[bool] = False,
+ ) -> None:
+ """Instantiate the transport.
+
+ Args:
+ host (Optional[str]):
+ The hostname to connect to.
+ credentials (Optional[google.auth.credentials.Credentials]): The
+ authorization credentials to attach to requests. These
+ credentials identify the application to the service; if none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ This argument is ignored if ``channel`` is provided.
+ credentials_file (Optional[str]): A file with credentials that can
+ be loaded with :func:`google.auth.load_credentials_from_file`.
+ This argument is ignored if ``channel`` is provided.
+ scopes (Optional(Sequence[str])): A list of scopes. This argument is
+ ignored if ``channel`` is provided.
+ channel (Optional[grpc.Channel]): A ``Channel`` instance through
+ which to make calls.
+ api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint.
+ If provided, it overrides the ``host`` argument and tries to create
+ a mutual TLS channel with client SSL credentials from
+ ``client_cert_source`` or applicatin default SSL credentials.
+ client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]):
+ Deprecated. A callback to provide client SSL certificate bytes and
+ private key bytes, both in PEM format. It is ignored if
+ ``api_mtls_endpoint`` is None.
+ ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials
+ for grpc channel. It is ignored if ``channel`` is provided.
+ client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]):
+ A callback to provide client certificate bytes and private key bytes,
+ both in PEM format. It is used to configure mutual TLS channel. It is
+ ignored if ``channel`` or ``ssl_channel_credentials`` is provided.
+ quota_project_id (Optional[str]): An optional project to use for billing
+ and quota.
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
+ The client info used to send a user-agent string along with
+ API requests. If ``None``, then default info will be used.
+ Generally, you only need to set this if you're developing
+ your own client library.
+ always_use_jwt_access (Optional[bool]): Whether self signed JWT should
+ be used for service account credentials.
+
+ Raises:
+ google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport
+ creation failed for any reason.
+ google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials``
+ and ``credentials_file`` are passed.
+ """
+ self._grpc_channel = None
+ self._ssl_channel_credentials = ssl_channel_credentials
+ self._stubs: Dict[str, Callable] = {}
+
+ if api_mtls_endpoint:
+ warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning)
+ if client_cert_source:
+ warnings.warn("client_cert_source is deprecated", DeprecationWarning)
+
+ if channel:
+ # Ignore credentials if a channel was passed.
+ credentials = False
+ # If a channel was explicitly provided, set it.
+ self._grpc_channel = channel
+ self._ssl_channel_credentials = None
+
+ else:
+ if api_mtls_endpoint:
+ host = api_mtls_endpoint
+
+ # Create SSL credentials with client_cert_source or application
+ # default SSL credentials.
+ if client_cert_source:
+ cert, key = client_cert_source()
+ self._ssl_channel_credentials = grpc.ssl_channel_credentials(
+ certificate_chain=cert, private_key=key
+ )
+ else:
+ self._ssl_channel_credentials = SslCredentials().ssl_credentials
+
+ else:
+ if client_cert_source_for_mtls and not ssl_channel_credentials:
+ cert, key = client_cert_source_for_mtls()
+ self._ssl_channel_credentials = grpc.ssl_channel_credentials(
+ certificate_chain=cert, private_key=key
+ )
+
+ # The base transport sets the host, credentials and scopes
+ super().__init__(
+ host=host,
+ credentials=credentials,
+ credentials_file=credentials_file,
+ scopes=scopes,
+ quota_project_id=quota_project_id,
+ client_info=client_info,
+ always_use_jwt_access=always_use_jwt_access,
+ )
+
+ if not self._grpc_channel:
+ self._grpc_channel = type(self).create_channel(
+ self._host,
+ credentials=self._credentials,
+ credentials_file=credentials_file,
+ scopes=self._scopes,
+ ssl_credentials=self._ssl_channel_credentials,
+ quota_project_id=quota_project_id,
+ options=[
+ ("grpc.max_send_message_length", -1),
+ ("grpc.max_receive_message_length", -1),
+ ],
+ )
+
+ # Wrap messages. This must be done after self._grpc_channel exists
+ self._prep_wrapped_messages(client_info)
+
+ @classmethod
+ def create_channel(cls,
+ host: str = 'webrisk.googleapis.com',
+ credentials: ga_credentials.Credentials = None,
+ credentials_file: str = None,
+ scopes: Optional[Sequence[str]] = None,
+ quota_project_id: Optional[str] = None,
+ **kwargs) -> grpc.Channel:
+ """Create and return a gRPC channel object.
+ Args:
+ host (Optional[str]): The host for the channel to use.
+ credentials (Optional[~.Credentials]): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If
+ none are specified, the client will attempt to ascertain
+ the credentials from the environment.
+ credentials_file (Optional[str]): A file with credentials that can
+ be loaded with :func:`google.auth.load_credentials_from_file`.
+ This argument is mutually exclusive with credentials.
+ scopes (Optional[Sequence[str]]): A optional list of scopes needed for this
+ service. These are only used when credentials are not specified and
+ are passed to :func:`google.auth.default`.
+ quota_project_id (Optional[str]): An optional project to use for billing
+ and quota.
+ kwargs (Optional[dict]): Keyword arguments, which are passed to the
+ channel creation.
+ Returns:
+ grpc.Channel: A gRPC channel object.
+
+ Raises:
+ google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials``
+ and ``credentials_file`` are passed.
+ """
+
+ return grpc_helpers.create_channel(
+ host,
+ credentials=credentials,
+ credentials_file=credentials_file,
+ quota_project_id=quota_project_id,
+ default_scopes=cls.AUTH_SCOPES,
+ scopes=scopes,
+ default_host=cls.DEFAULT_HOST,
+ **kwargs
+ )
+
+ @property
+ def grpc_channel(self) -> grpc.Channel:
+ """Return the channel designed to connect to this service.
+ """
+ return self._grpc_channel
+
+ @property
+ def compute_threat_list_diff(self) -> Callable[
+ [webrisk.ComputeThreatListDiffRequest],
+ webrisk.ComputeThreatListDiffResponse]:
+ r"""Return a callable for the compute threat list diff method over gRPC.
+
+ Gets the most recent threat list diffs.
+
+ Returns:
+ Callable[[~.ComputeThreatListDiffRequest],
+ ~.ComputeThreatListDiffResponse]:
+ A function that, when called, will call the underlying RPC
+ on the server.
+ """
+ # Generate a "stub function" on-the-fly which will actually make
+ # the request.
+ # gRPC handles serialization and deserialization, so we just need
+ # to pass in the functions for each.
+ if 'compute_threat_list_diff' not in self._stubs:
+ self._stubs['compute_threat_list_diff'] = self.grpc_channel.unary_unary(
+ '/google.cloud.webrisk.v1beta1.WebRiskServiceV1Beta1/ComputeThreatListDiff',
+ request_serializer=webrisk.ComputeThreatListDiffRequest.serialize,
+ response_deserializer=webrisk.ComputeThreatListDiffResponse.deserialize,
+ )
+ return self._stubs['compute_threat_list_diff']
+
+ @property
+ def search_uris(self) -> Callable[
+ [webrisk.SearchUrisRequest],
+ webrisk.SearchUrisResponse]:
+ r"""Return a callable for the search uris method over gRPC.
+
+ This method is used to check whether a URI is on a
+ given threatList.
+
+ Returns:
+ Callable[[~.SearchUrisRequest],
+ ~.SearchUrisResponse]:
+ A function that, when called, will call the underlying RPC
+ on the server.
+ """
+ # Generate a "stub function" on-the-fly which will actually make
+ # the request.
+ # gRPC handles serialization and deserialization, so we just need
+ # to pass in the functions for each.
+ if 'search_uris' not in self._stubs:
+ self._stubs['search_uris'] = self.grpc_channel.unary_unary(
+ '/google.cloud.webrisk.v1beta1.WebRiskServiceV1Beta1/SearchUris',
+ request_serializer=webrisk.SearchUrisRequest.serialize,
+ response_deserializer=webrisk.SearchUrisResponse.deserialize,
+ )
+ return self._stubs['search_uris']
+
+ @property
+ def search_hashes(self) -> Callable[
+ [webrisk.SearchHashesRequest],
+ webrisk.SearchHashesResponse]:
+ r"""Return a callable for the search hashes method over gRPC.
+
+ Gets the full hashes that match the requested hash
+ prefix. This is used after a hash prefix is looked up in
+ a threatList and there is a match. The client side
+ threatList only holds partial hashes so the client must
+ query this method to determine if there is a full hash
+ match of a threat.
+
+ Returns:
+ Callable[[~.SearchHashesRequest],
+ ~.SearchHashesResponse]:
+ A function that, when called, will call the underlying RPC
+ on the server.
+ """
+ # Generate a "stub function" on-the-fly which will actually make
+ # the request.
+ # gRPC handles serialization and deserialization, so we just need
+ # to pass in the functions for each.
+ if 'search_hashes' not in self._stubs:
+ self._stubs['search_hashes'] = self.grpc_channel.unary_unary(
+ '/google.cloud.webrisk.v1beta1.WebRiskServiceV1Beta1/SearchHashes',
+ request_serializer=webrisk.SearchHashesRequest.serialize,
+ response_deserializer=webrisk.SearchHashesResponse.deserialize,
+ )
+ return self._stubs['search_hashes']
+
+
+__all__ = (
+ 'WebRiskServiceV1Beta1GrpcTransport',
+)
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc_asyncio.py b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc_asyncio.py
new file mode 100644
index 0000000..b078970
--- /dev/null
+++ b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc_asyncio.py
@@ -0,0 +1,315 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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 warnings
+from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union
+
+from google.api_core import gapic_v1 # type: ignore
+from google.api_core import grpc_helpers_async # type: ignore
+from google.auth import credentials as ga_credentials # type: ignore
+from google.auth.transport.grpc import SslCredentials # type: ignore
+import packaging.version
+
+import grpc # type: ignore
+from grpc.experimental import aio # type: ignore
+
+from google.cloud.webrisk_v1beta1.types import webrisk
+from .base import WebRiskServiceV1Beta1Transport, DEFAULT_CLIENT_INFO
+from .grpc import WebRiskServiceV1Beta1GrpcTransport
+
+
+class WebRiskServiceV1Beta1GrpcAsyncIOTransport(WebRiskServiceV1Beta1Transport):
+ """gRPC AsyncIO backend transport for WebRiskServiceV1Beta1.
+
+ Web Risk v1beta1 API defines an interface to detect malicious
+ URLs on your website and in client applications.
+
+ This class defines the same methods as the primary client, so the
+ primary client can load the underlying transport implementation
+ and call it.
+
+ It sends protocol buffers over the wire using gRPC (which is built on
+ top of HTTP/2); the ``grpcio`` package must be installed.
+ """
+
+ _grpc_channel: aio.Channel
+ _stubs: Dict[str, Callable] = {}
+
+ @classmethod
+ def create_channel(cls,
+ host: str = 'webrisk.googleapis.com',
+ credentials: ga_credentials.Credentials = None,
+ credentials_file: Optional[str] = None,
+ scopes: Optional[Sequence[str]] = None,
+ quota_project_id: Optional[str] = None,
+ **kwargs) -> aio.Channel:
+ """Create and return a gRPC AsyncIO channel object.
+ Args:
+ host (Optional[str]): The host for the channel to use.
+ credentials (Optional[~.Credentials]): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If
+ none are specified, the client will attempt to ascertain
+ the credentials from the environment.
+ credentials_file (Optional[str]): A file with credentials that can
+ be loaded with :func:`google.auth.load_credentials_from_file`.
+ This argument is ignored if ``channel`` is provided.
+ scopes (Optional[Sequence[str]]): A optional list of scopes needed for this
+ service. These are only used when credentials are not specified and
+ are passed to :func:`google.auth.default`.
+ quota_project_id (Optional[str]): An optional project to use for billing
+ and quota.
+ kwargs (Optional[dict]): Keyword arguments, which are passed to the
+ channel creation.
+ Returns:
+ aio.Channel: A gRPC AsyncIO channel object.
+ """
+
+ return grpc_helpers_async.create_channel(
+ host,
+ credentials=credentials,
+ credentials_file=credentials_file,
+ quota_project_id=quota_project_id,
+ default_scopes=cls.AUTH_SCOPES,
+ scopes=scopes,
+ default_host=cls.DEFAULT_HOST,
+ **kwargs
+ )
+
+ def __init__(self, *,
+ host: str = 'webrisk.googleapis.com',
+ credentials: ga_credentials.Credentials = None,
+ credentials_file: Optional[str] = None,
+ scopes: Optional[Sequence[str]] = None,
+ channel: aio.Channel = None,
+ api_mtls_endpoint: str = None,
+ client_cert_source: Callable[[], Tuple[bytes, bytes]] = None,
+ ssl_channel_credentials: grpc.ChannelCredentials = None,
+ client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None,
+ quota_project_id=None,
+ client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
+ always_use_jwt_access: Optional[bool] = False,
+ ) -> None:
+ """Instantiate the transport.
+
+ Args:
+ host (Optional[str]):
+ The hostname to connect to.
+ credentials (Optional[google.auth.credentials.Credentials]): The
+ authorization credentials to attach to requests. These
+ credentials identify the application to the service; if none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ This argument is ignored if ``channel`` is provided.
+ credentials_file (Optional[str]): A file with credentials that can
+ be loaded with :func:`google.auth.load_credentials_from_file`.
+ This argument is ignored if ``channel`` is provided.
+ scopes (Optional[Sequence[str]]): A optional list of scopes needed for this
+ service. These are only used when credentials are not specified and
+ are passed to :func:`google.auth.default`.
+ channel (Optional[aio.Channel]): A ``Channel`` instance through
+ which to make calls.
+ api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint.
+ If provided, it overrides the ``host`` argument and tries to create
+ a mutual TLS channel with client SSL credentials from
+ ``client_cert_source`` or applicatin default SSL credentials.
+ client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]):
+ Deprecated. A callback to provide client SSL certificate bytes and
+ private key bytes, both in PEM format. It is ignored if
+ ``api_mtls_endpoint`` is None.
+ ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials
+ for grpc channel. It is ignored if ``channel`` is provided.
+ client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]):
+ A callback to provide client certificate bytes and private key bytes,
+ both in PEM format. It is used to configure mutual TLS channel. It is
+ ignored if ``channel`` or ``ssl_channel_credentials`` is provided.
+ quota_project_id (Optional[str]): An optional project to use for billing
+ and quota.
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
+ The client info used to send a user-agent string along with
+ API requests. If ``None``, then default info will be used.
+ Generally, you only need to set this if you're developing
+ your own client library.
+ always_use_jwt_access (Optional[bool]): Whether self signed JWT should
+ be used for service account credentials.
+
+ Raises:
+ google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport
+ creation failed for any reason.
+ google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials``
+ and ``credentials_file`` are passed.
+ """
+ self._grpc_channel = None
+ self._ssl_channel_credentials = ssl_channel_credentials
+ self._stubs: Dict[str, Callable] = {}
+
+ if api_mtls_endpoint:
+ warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning)
+ if client_cert_source:
+ warnings.warn("client_cert_source is deprecated", DeprecationWarning)
+
+ if channel:
+ # Ignore credentials if a channel was passed.
+ credentials = False
+ # If a channel was explicitly provided, set it.
+ self._grpc_channel = channel
+ self._ssl_channel_credentials = None
+ else:
+ if api_mtls_endpoint:
+ host = api_mtls_endpoint
+
+ # Create SSL credentials with client_cert_source or application
+ # default SSL credentials.
+ if client_cert_source:
+ cert, key = client_cert_source()
+ self._ssl_channel_credentials = grpc.ssl_channel_credentials(
+ certificate_chain=cert, private_key=key
+ )
+ else:
+ self._ssl_channel_credentials = SslCredentials().ssl_credentials
+
+ else:
+ if client_cert_source_for_mtls and not ssl_channel_credentials:
+ cert, key = client_cert_source_for_mtls()
+ self._ssl_channel_credentials = grpc.ssl_channel_credentials(
+ certificate_chain=cert, private_key=key
+ )
+
+ # The base transport sets the host, credentials and scopes
+ super().__init__(
+ host=host,
+ credentials=credentials,
+ credentials_file=credentials_file,
+ scopes=scopes,
+ quota_project_id=quota_project_id,
+ client_info=client_info,
+ always_use_jwt_access=always_use_jwt_access,
+ )
+
+ if not self._grpc_channel:
+ self._grpc_channel = type(self).create_channel(
+ self._host,
+ credentials=self._credentials,
+ credentials_file=credentials_file,
+ scopes=self._scopes,
+ ssl_credentials=self._ssl_channel_credentials,
+ quota_project_id=quota_project_id,
+ options=[
+ ("grpc.max_send_message_length", -1),
+ ("grpc.max_receive_message_length", -1),
+ ],
+ )
+
+ # Wrap messages. This must be done after self._grpc_channel exists
+ self._prep_wrapped_messages(client_info)
+
+ @property
+ def grpc_channel(self) -> aio.Channel:
+ """Create the channel designed to connect to this service.
+
+ This property caches on the instance; repeated calls return
+ the same channel.
+ """
+ # Return the channel from cache.
+ return self._grpc_channel
+
+ @property
+ def compute_threat_list_diff(self) -> Callable[
+ [webrisk.ComputeThreatListDiffRequest],
+ Awaitable[webrisk.ComputeThreatListDiffResponse]]:
+ r"""Return a callable for the compute threat list diff method over gRPC.
+
+ Gets the most recent threat list diffs.
+
+ Returns:
+ Callable[[~.ComputeThreatListDiffRequest],
+ Awaitable[~.ComputeThreatListDiffResponse]]:
+ A function that, when called, will call the underlying RPC
+ on the server.
+ """
+ # Generate a "stub function" on-the-fly which will actually make
+ # the request.
+ # gRPC handles serialization and deserialization, so we just need
+ # to pass in the functions for each.
+ if 'compute_threat_list_diff' not in self._stubs:
+ self._stubs['compute_threat_list_diff'] = self.grpc_channel.unary_unary(
+ '/google.cloud.webrisk.v1beta1.WebRiskServiceV1Beta1/ComputeThreatListDiff',
+ request_serializer=webrisk.ComputeThreatListDiffRequest.serialize,
+ response_deserializer=webrisk.ComputeThreatListDiffResponse.deserialize,
+ )
+ return self._stubs['compute_threat_list_diff']
+
+ @property
+ def search_uris(self) -> Callable[
+ [webrisk.SearchUrisRequest],
+ Awaitable[webrisk.SearchUrisResponse]]:
+ r"""Return a callable for the search uris method over gRPC.
+
+ This method is used to check whether a URI is on a
+ given threatList.
+
+ Returns:
+ Callable[[~.SearchUrisRequest],
+ Awaitable[~.SearchUrisResponse]]:
+ A function that, when called, will call the underlying RPC
+ on the server.
+ """
+ # Generate a "stub function" on-the-fly which will actually make
+ # the request.
+ # gRPC handles serialization and deserialization, so we just need
+ # to pass in the functions for each.
+ if 'search_uris' not in self._stubs:
+ self._stubs['search_uris'] = self.grpc_channel.unary_unary(
+ '/google.cloud.webrisk.v1beta1.WebRiskServiceV1Beta1/SearchUris',
+ request_serializer=webrisk.SearchUrisRequest.serialize,
+ response_deserializer=webrisk.SearchUrisResponse.deserialize,
+ )
+ return self._stubs['search_uris']
+
+ @property
+ def search_hashes(self) -> Callable[
+ [webrisk.SearchHashesRequest],
+ Awaitable[webrisk.SearchHashesResponse]]:
+ r"""Return a callable for the search hashes method over gRPC.
+
+ Gets the full hashes that match the requested hash
+ prefix. This is used after a hash prefix is looked up in
+ a threatList and there is a match. The client side
+ threatList only holds partial hashes so the client must
+ query this method to determine if there is a full hash
+ match of a threat.
+
+ Returns:
+ Callable[[~.SearchHashesRequest],
+ Awaitable[~.SearchHashesResponse]]:
+ A function that, when called, will call the underlying RPC
+ on the server.
+ """
+ # Generate a "stub function" on-the-fly which will actually make
+ # the request.
+ # gRPC handles serialization and deserialization, so we just need
+ # to pass in the functions for each.
+ if 'search_hashes' not in self._stubs:
+ self._stubs['search_hashes'] = self.grpc_channel.unary_unary(
+ '/google.cloud.webrisk.v1beta1.WebRiskServiceV1Beta1/SearchHashes',
+ request_serializer=webrisk.SearchHashesRequest.serialize,
+ response_deserializer=webrisk.SearchHashesResponse.deserialize,
+ )
+ return self._stubs['search_hashes']
+
+
+__all__ = (
+ 'WebRiskServiceV1Beta1GrpcAsyncIOTransport',
+)
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/types/__init__.py b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/types/__init__.py
new file mode 100644
index 0000000..215caf4
--- /dev/null
+++ b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/types/__init__.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+from .webrisk import (
+ ComputeThreatListDiffRequest,
+ ComputeThreatListDiffResponse,
+ RawHashes,
+ RawIndices,
+ RiceDeltaEncoding,
+ SearchHashesRequest,
+ SearchHashesResponse,
+ SearchUrisRequest,
+ SearchUrisResponse,
+ ThreatEntryAdditions,
+ ThreatEntryRemovals,
+ CompressionType,
+ ThreatType,
+)
+
+__all__ = (
+ 'ComputeThreatListDiffRequest',
+ 'ComputeThreatListDiffResponse',
+ 'RawHashes',
+ 'RawIndices',
+ 'RiceDeltaEncoding',
+ 'SearchHashesRequest',
+ 'SearchHashesResponse',
+ 'SearchUrisRequest',
+ 'SearchUrisResponse',
+ 'ThreatEntryAdditions',
+ 'ThreatEntryRemovals',
+ 'CompressionType',
+ 'ThreatType',
+)
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/types/webrisk.py b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/types/webrisk.py
new file mode 100644
index 0000000..4f4ec51
--- /dev/null
+++ b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/types/webrisk.py
@@ -0,0 +1,478 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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 proto # type: ignore
+
+from google.protobuf import timestamp_pb2 # type: ignore
+
+
+__protobuf__ = proto.module(
+ package='google.cloud.webrisk.v1beta1',
+ manifest={
+ 'ThreatType',
+ 'CompressionType',
+ 'ComputeThreatListDiffRequest',
+ 'ComputeThreatListDiffResponse',
+ 'SearchUrisRequest',
+ 'SearchUrisResponse',
+ 'SearchHashesRequest',
+ 'SearchHashesResponse',
+ 'ThreatEntryAdditions',
+ 'ThreatEntryRemovals',
+ 'RawIndices',
+ 'RawHashes',
+ 'RiceDeltaEncoding',
+ },
+)
+
+
+class ThreatType(proto.Enum):
+ r"""The type of threat. This maps dirrectly to the threat list a
+ threat may belong to.
+ """
+ THREAT_TYPE_UNSPECIFIED = 0
+ MALWARE = 1
+ SOCIAL_ENGINEERING = 2
+ UNWANTED_SOFTWARE = 3
+
+
+class CompressionType(proto.Enum):
+ r"""The ways in which threat entry sets can be compressed."""
+ COMPRESSION_TYPE_UNSPECIFIED = 0
+ RAW = 1
+ RICE = 2
+
+
+class ComputeThreatListDiffRequest(proto.Message):
+ r"""Describes an API diff request.
+ Attributes:
+ threat_type (google.cloud.webrisk_v1beta1.types.ThreatType):
+ The ThreatList to update.
+ version_token (bytes):
+ The current version token of the client for
+ the requested list (the client version that was
+ received from the last successful diff).
+ constraints (google.cloud.webrisk_v1beta1.types.ComputeThreatListDiffRequest.Constraints):
+ Required. The constraints associated with
+ this request.
+ """
+
+ class Constraints(proto.Message):
+ r"""The constraints for this diff.
+ Attributes:
+ max_diff_entries (int):
+ The maximum size in number of entries. The diff will not
+ contain more entries than this value. This should be a power
+ of 2 between 2\ **10 and 2**\ 20. If zero, no diff size
+ limit is set.
+ max_database_entries (int):
+ Sets the maximum number of entries that the client is
+ willing to have in the local database. This should be a
+ power of 2 between 2\ **10 and 2**\ 20. If zero, no database
+ size limit is set.
+ supported_compressions (Sequence[google.cloud.webrisk_v1beta1.types.CompressionType]):
+ The compression types supported by the
+ client.
+ """
+
+ max_diff_entries = proto.Field(
+ proto.INT32,
+ number=1,
+ )
+ max_database_entries = proto.Field(
+ proto.INT32,
+ number=2,
+ )
+ supported_compressions = proto.RepeatedField(
+ proto.ENUM,
+ number=3,
+ enum='CompressionType',
+ )
+
+ threat_type = proto.Field(
+ proto.ENUM,
+ number=1,
+ enum='ThreatType',
+ )
+ version_token = proto.Field(
+ proto.BYTES,
+ number=2,
+ )
+ constraints = proto.Field(
+ proto.MESSAGE,
+ number=3,
+ message=Constraints,
+ )
+
+
+class ComputeThreatListDiffResponse(proto.Message):
+ r"""
+ Attributes:
+ response_type (google.cloud.webrisk_v1beta1.types.ComputeThreatListDiffResponse.ResponseType):
+ The type of response. This may indicate that
+ an action must be taken by the client when the
+ response is received.
+ additions (google.cloud.webrisk_v1beta1.types.ThreatEntryAdditions):
+ A set of entries to add to a local threat
+ type's list.
+ removals (google.cloud.webrisk_v1beta1.types.ThreatEntryRemovals):
+ A set of entries to remove from a local
+ threat type's list. This field may be empty.
+ new_version_token (bytes):
+ The new opaque client version token.
+ checksum (google.cloud.webrisk_v1beta1.types.ComputeThreatListDiffResponse.Checksum):
+ The expected SHA256 hash of the client state;
+ that is, of the sorted list of all hashes
+ present in the database after applying the
+ provided diff. If the client state doesn't match
+ the expected state, the client must disregard
+ this diff and retry later.
+ recommended_next_diff (google.protobuf.timestamp_pb2.Timestamp):
+ The soonest the client should wait before
+ issuing any diff request. Querying sooner is
+ unlikely to produce a meaningful diff. Waiting
+ longer is acceptable considering the use case.
+ If this field is not set clients may update as
+ soon as they want.
+ """
+ class ResponseType(proto.Enum):
+ r"""The type of response sent to the client."""
+ RESPONSE_TYPE_UNSPECIFIED = 0
+ DIFF = 1
+ RESET = 2
+
+ class Checksum(proto.Message):
+ r"""The expected state of a client's local database.
+ Attributes:
+ sha256 (bytes):
+ The SHA256 hash of the client state; that is,
+ of the sorted list of all hashes present in the
+ database.
+ """
+
+ sha256 = proto.Field(
+ proto.BYTES,
+ number=1,
+ )
+
+ response_type = proto.Field(
+ proto.ENUM,
+ number=4,
+ enum=ResponseType,
+ )
+ additions = proto.Field(
+ proto.MESSAGE,
+ number=5,
+ message='ThreatEntryAdditions',
+ )
+ removals = proto.Field(
+ proto.MESSAGE,
+ number=6,
+ message='ThreatEntryRemovals',
+ )
+ new_version_token = proto.Field(
+ proto.BYTES,
+ number=7,
+ )
+ checksum = proto.Field(
+ proto.MESSAGE,
+ number=8,
+ message=Checksum,
+ )
+ recommended_next_diff = proto.Field(
+ proto.MESSAGE,
+ number=2,
+ message=timestamp_pb2.Timestamp,
+ )
+
+
+class SearchUrisRequest(proto.Message):
+ r"""Request to check URI entries against threatLists.
+ Attributes:
+ uri (str):
+ Required. The URI to be checked for matches.
+ threat_types (Sequence[google.cloud.webrisk_v1beta1.types.ThreatType]):
+ Required. The ThreatLists to search in.
+ """
+
+ uri = proto.Field(
+ proto.STRING,
+ number=1,
+ )
+ threat_types = proto.RepeatedField(
+ proto.ENUM,
+ number=2,
+ enum='ThreatType',
+ )
+
+
+class SearchUrisResponse(proto.Message):
+ r"""
+ Attributes:
+ threat (google.cloud.webrisk_v1beta1.types.SearchUrisResponse.ThreatUri):
+ The threat list matches. This may be empty if
+ the URI is on no list.
+ """
+
+ class ThreatUri(proto.Message):
+ r"""Contains threat information on a matching uri.
+ Attributes:
+ threat_types (Sequence[google.cloud.webrisk_v1beta1.types.ThreatType]):
+ The ThreatList this threat belongs to.
+ expire_time (google.protobuf.timestamp_pb2.Timestamp):
+ The cache lifetime for the returned match.
+ Clients must not cache this response past this
+ timestamp to avoid false positives.
+ """
+
+ threat_types = proto.RepeatedField(
+ proto.ENUM,
+ number=1,
+ enum='ThreatType',
+ )
+ expire_time = proto.Field(
+ proto.MESSAGE,
+ number=2,
+ message=timestamp_pb2.Timestamp,
+ )
+
+ threat = proto.Field(
+ proto.MESSAGE,
+ number=1,
+ message=ThreatUri,
+ )
+
+
+class SearchHashesRequest(proto.Message):
+ r"""Request to return full hashes matched by the provided hash
+ prefixes.
+
+ Attributes:
+ hash_prefix (bytes):
+ A hash prefix, consisting of the most
+ significant 4-32 bytes of a SHA256 hash. For
+ JSON requests, this field is base64-encoded.
+ threat_types (Sequence[google.cloud.webrisk_v1beta1.types.ThreatType]):
+ Required. The ThreatLists to search in.
+ """
+
+ hash_prefix = proto.Field(
+ proto.BYTES,
+ number=1,
+ )
+ threat_types = proto.RepeatedField(
+ proto.ENUM,
+ number=2,
+ enum='ThreatType',
+ )
+
+
+class SearchHashesResponse(proto.Message):
+ r"""
+ Attributes:
+ threats (Sequence[google.cloud.webrisk_v1beta1.types.SearchHashesResponse.ThreatHash]):
+ The full hashes that matched the requested
+ prefixes. The hash will be populated in the key.
+ negative_expire_time (google.protobuf.timestamp_pb2.Timestamp):
+ For requested entities that did not match the
+ threat list, how long to cache the response
+ until.
+ """
+
+ class ThreatHash(proto.Message):
+ r"""Contains threat information on a matching hash.
+ Attributes:
+ threat_types (Sequence[google.cloud.webrisk_v1beta1.types.ThreatType]):
+ The ThreatList this threat belongs to.
+ This must contain at least one entry.
+ hash_ (bytes):
+ A 32 byte SHA256 hash. This field is in
+ binary format. For JSON requests, hashes are
+ base64-encoded.
+ expire_time (google.protobuf.timestamp_pb2.Timestamp):
+ The cache lifetime for the returned match.
+ Clients must not cache this response past this
+ timestamp to avoid false positives.
+ """
+
+ threat_types = proto.RepeatedField(
+ proto.ENUM,
+ number=1,
+ enum='ThreatType',
+ )
+ hash_ = proto.Field(
+ proto.BYTES,
+ number=2,
+ )
+ expire_time = proto.Field(
+ proto.MESSAGE,
+ number=3,
+ message=timestamp_pb2.Timestamp,
+ )
+
+ threats = proto.RepeatedField(
+ proto.MESSAGE,
+ number=1,
+ message=ThreatHash,
+ )
+ negative_expire_time = proto.Field(
+ proto.MESSAGE,
+ number=2,
+ message=timestamp_pb2.Timestamp,
+ )
+
+
+class ThreatEntryAdditions(proto.Message):
+ r"""Contains the set of entries to add to a local database.
+ May contain a combination of compressed and raw data in a single
+ response.
+
+ Attributes:
+ raw_hashes (Sequence[google.cloud.webrisk_v1beta1.types.RawHashes]):
+ The raw SHA256-formatted entries.
+ Repeated to allow returning sets of hashes with
+ different prefix sizes.
+ rice_hashes (google.cloud.webrisk_v1beta1.types.RiceDeltaEncoding):
+ The encoded 4-byte prefixes of SHA256-formatted entries,
+ using a Golomb-Rice encoding. The hashes are converted to
+ uint32, sorted in ascending order, then delta encoded and
+ stored as encoded_data.
+ """
+
+ raw_hashes = proto.RepeatedField(
+ proto.MESSAGE,
+ number=1,
+ message='RawHashes',
+ )
+ rice_hashes = proto.Field(
+ proto.MESSAGE,
+ number=2,
+ message='RiceDeltaEncoding',
+ )
+
+
+class ThreatEntryRemovals(proto.Message):
+ r"""Contains the set of entries to remove from a local database.
+ Attributes:
+ raw_indices (google.cloud.webrisk_v1beta1.types.RawIndices):
+ The raw removal indices for a local list.
+ rice_indices (google.cloud.webrisk_v1beta1.types.RiceDeltaEncoding):
+ The encoded local, lexicographically-sorted list indices,
+ using a Golomb-Rice encoding. Used for sending compressed
+ removal indices. The removal indices (uint32) are sorted in
+ ascending order, then delta encoded and stored as
+ encoded_data.
+ """
+
+ raw_indices = proto.Field(
+ proto.MESSAGE,
+ number=1,
+ message='RawIndices',
+ )
+ rice_indices = proto.Field(
+ proto.MESSAGE,
+ number=2,
+ message='RiceDeltaEncoding',
+ )
+
+
+class RawIndices(proto.Message):
+ r"""A set of raw indices to remove from a local list.
+ Attributes:
+ indices (Sequence[int]):
+ The indices to remove from a
+ lexicographically-sorted local list.
+ """
+
+ indices = proto.RepeatedField(
+ proto.INT32,
+ number=1,
+ )
+
+
+class RawHashes(proto.Message):
+ r"""The uncompressed threat entries in hash format.
+ Hashes can be anywhere from 4 to 32 bytes in size. A large
+ majority are 4 bytes, but some hashes are lengthened if they
+ collide with the hash of a popular URI.
+
+ Used for sending ThreatEntryAdditons to clients that do not
+ support compression, or when sending non-4-byte hashes to
+ clients that do support compression.
+
+ Attributes:
+ prefix_size (int):
+ The number of bytes for each prefix encoded
+ below. This field can be anywhere from 4
+ (shortest prefix) to 32 (full SHA256 hash).
+ raw_hashes (bytes):
+ The hashes, in binary format, concatenated
+ into one long string. Hashes are sorted in
+ lexicographic order. For JSON API users, hashes
+ are base64-encoded.
+ """
+
+ prefix_size = proto.Field(
+ proto.INT32,
+ number=1,
+ )
+ raw_hashes = proto.Field(
+ proto.BYTES,
+ number=2,
+ )
+
+
+class RiceDeltaEncoding(proto.Message):
+ r"""The Rice-Golomb encoded data. Used for sending compressed
+ 4-byte hashes or compressed removal indices.
+
+ Attributes:
+ first_value (int):
+ The offset of the first entry in the encoded
+ data, or, if only a single integer was encoded,
+ that single integer's value. If the field is
+ empty or missing, assume zero.
+ rice_parameter (int):
+ The Golomb-Rice parameter, which is a number between 2 and
+ 28. This field is missing (that is, zero) if ``num_entries``
+ is zero.
+ entry_count (int):
+ The number of entries that are delta encoded in the encoded
+ data. If only a single integer was encoded, this will be
+ zero and the single value will be stored in ``first_value``.
+ encoded_data (bytes):
+ The encoded deltas that are encoded using the
+ Golomb-Rice coder.
+ """
+
+ first_value = proto.Field(
+ proto.INT64,
+ number=1,
+ )
+ rice_parameter = proto.Field(
+ proto.INT32,
+ number=2,
+ )
+ entry_count = proto.Field(
+ proto.INT32,
+ number=3,
+ )
+ encoded_data = proto.Field(
+ proto.BYTES,
+ number=4,
+ )
+
+
+__all__ = tuple(sorted(__protobuf__.manifest))
diff --git a/owl-bot-staging/v1beta1/mypy.ini b/owl-bot-staging/v1beta1/mypy.ini
new file mode 100644
index 0000000..4505b48
--- /dev/null
+++ b/owl-bot-staging/v1beta1/mypy.ini
@@ -0,0 +1,3 @@
+[mypy]
+python_version = 3.6
+namespace_packages = True
diff --git a/owl-bot-staging/v1beta1/noxfile.py b/owl-bot-staging/v1beta1/noxfile.py
new file mode 100644
index 0000000..73504b6
--- /dev/null
+++ b/owl-bot-staging/v1beta1/noxfile.py
@@ -0,0 +1,132 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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 pathlib
+import shutil
+import subprocess
+import sys
+
+
+import nox # type: ignore
+
+CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute()
+
+LOWER_BOUND_CONSTRAINTS_FILE = CURRENT_DIRECTORY / "constraints.txt"
+PACKAGE_NAME = subprocess.check_output([sys.executable, "setup.py", "--name"], encoding="utf-8")
+
+
+nox.sessions = [
+ "unit",
+ "cover",
+ "mypy",
+ "check_lower_bounds"
+ # exclude update_lower_bounds from default
+ "docs",
+]
+
+@nox.session(python=['3.6', '3.7', '3.8', '3.9'])
+def unit(session):
+ """Run the unit test suite."""
+
+ session.install('coverage', 'pytest', 'pytest-cov', 'asyncmock', 'pytest-asyncio')
+ session.install('-e', '.')
+
+ session.run(
+ 'py.test',
+ '--quiet',
+ '--cov=google/cloud/webrisk_v1beta1/',
+ '--cov-config=.coveragerc',
+ '--cov-report=term',
+ '--cov-report=html',
+ os.path.join('tests', 'unit', ''.join(session.posargs))
+ )
+
+
+@nox.session(python='3.7')
+def cover(session):
+ """Run the final coverage report.
+ This outputs the coverage report aggregating coverage from the unit
+ test runs (not system test runs), and then erases coverage data.
+ """
+ session.install("coverage", "pytest-cov")
+ session.run("coverage", "report", "--show-missing", "--fail-under=100")
+
+ session.run("coverage", "erase")
+
+
+@nox.session(python=['3.6', '3.7'])
+def mypy(session):
+ """Run the type checker."""
+ session.install('mypy', 'types-pkg_resources')
+ session.install('.')
+ session.run(
+ 'mypy',
+ '--explicit-package-bases',
+ 'google',
+ )
+
+
+@nox.session
+def update_lower_bounds(session):
+ """Update lower bounds in constraints.txt to match setup.py"""
+ session.install('google-cloud-testutils')
+ session.install('.')
+
+ session.run(
+ 'lower-bound-checker',
+ 'update',
+ '--package-name',
+ PACKAGE_NAME,
+ '--constraints-file',
+ str(LOWER_BOUND_CONSTRAINTS_FILE),
+ )
+
+
+@nox.session
+def check_lower_bounds(session):
+ """Check lower bounds in setup.py are reflected in constraints file"""
+ session.install('google-cloud-testutils')
+ session.install('.')
+
+ session.run(
+ 'lower-bound-checker',
+ 'check',
+ '--package-name',
+ PACKAGE_NAME,
+ '--constraints-file',
+ str(LOWER_BOUND_CONSTRAINTS_FILE),
+ )
+
+@nox.session(python='3.6')
+def docs(session):
+ """Build the docs for this library."""
+
+ session.install("-e", ".")
+ session.install("sphinx<3.0.0", "alabaster", "recommonmark")
+
+ shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True)
+ session.run(
+ "sphinx-build",
+ "-W", # warnings as errors
+ "-T", # show full traceback on exception
+ "-N", # no colors
+ "-b",
+ "html",
+ "-d",
+ os.path.join("docs", "_build", "doctrees", ""),
+ os.path.join("docs", ""),
+ os.path.join("docs", "_build", "html", ""),
+ )
diff --git a/owl-bot-staging/v1beta1/scripts/fixup_webrisk_v1beta1_keywords.py b/owl-bot-staging/v1beta1/scripts/fixup_webrisk_v1beta1_keywords.py
new file mode 100644
index 0000000..4b1391c
--- /dev/null
+++ b/owl-bot-staging/v1beta1/scripts/fixup_webrisk_v1beta1_keywords.py
@@ -0,0 +1,178 @@
+#! /usr/bin/env python3
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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 argparse
+import os
+import libcst as cst
+import pathlib
+import sys
+from typing import (Any, Callable, Dict, List, Sequence, Tuple)
+
+
+def partition(
+ predicate: Callable[[Any], bool],
+ iterator: Sequence[Any]
+) -> Tuple[List[Any], List[Any]]:
+ """A stable, out-of-place partition."""
+ results = ([], [])
+
+ for i in iterator:
+ results[int(predicate(i))].append(i)
+
+ # Returns trueList, falseList
+ return results[1], results[0]
+
+
+class webriskCallTransformer(cst.CSTTransformer):
+ CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata')
+ METHOD_TO_PARAMS: Dict[str, Tuple[str]] = {
+ 'compute_threat_list_diff': ('threat_type', 'constraints', 'version_token', ),
+ 'search_hashes': ('threat_types', 'hash_prefix', ),
+ 'search_uris': ('uri', 'threat_types', ),
+ }
+
+ def leave_Call(self, original: cst.Call, updated: cst.Call) -> cst.CSTNode:
+ try:
+ key = original.func.attr.value
+ kword_params = self.METHOD_TO_PARAMS[key]
+ except (AttributeError, KeyError):
+ # Either not a method from the API or too convoluted to be sure.
+ return updated
+
+ # If the existing code is valid, keyword args come after positional args.
+ # Therefore, all positional args must map to the first parameters.
+ args, kwargs = partition(lambda a: not bool(a.keyword), updated.args)
+ if any(k.keyword.value == "request" for k in kwargs):
+ # We've already fixed this file, don't fix it again.
+ return updated
+
+ kwargs, ctrl_kwargs = partition(
+ lambda a: not a.keyword.value in self.CTRL_PARAMS,
+ kwargs
+ )
+
+ args, ctrl_args = args[:len(kword_params)], args[len(kword_params):]
+ ctrl_kwargs.extend(cst.Arg(value=a.value, keyword=cst.Name(value=ctrl))
+ for a, ctrl in zip(ctrl_args, self.CTRL_PARAMS))
+
+ request_arg = cst.Arg(
+ value=cst.Dict([
+ cst.DictElement(
+ cst.SimpleString("'{}'".format(name)),
+cst.Element(value=arg.value)
+ )
+ # Note: the args + kwargs looks silly, but keep in mind that
+ # the control parameters had to be stripped out, and that
+ # those could have been passed positionally or by keyword.
+ for name, arg in zip(kword_params, args + kwargs)]),
+ keyword=cst.Name("request")
+ )
+
+ return updated.with_changes(
+ args=[request_arg] + ctrl_kwargs
+ )
+
+
+def fix_files(
+ in_dir: pathlib.Path,
+ out_dir: pathlib.Path,
+ *,
+ transformer=webriskCallTransformer(),
+):
+ """Duplicate the input dir to the output dir, fixing file method calls.
+
+ Preconditions:
+ * in_dir is a real directory
+ * out_dir is a real, empty directory
+ """
+ pyfile_gen = (
+ pathlib.Path(os.path.join(root, f))
+ for root, _, files in os.walk(in_dir)
+ for f in files if os.path.splitext(f)[1] == ".py"
+ )
+
+ for fpath in pyfile_gen:
+ with open(fpath, 'r') as f:
+ src = f.read()
+
+ # Parse the code and insert method call fixes.
+ tree = cst.parse_module(src)
+ updated = tree.visit(transformer)
+
+ # Create the path and directory structure for the new file.
+ updated_path = out_dir.joinpath(fpath.relative_to(in_dir))
+ updated_path.parent.mkdir(parents=True, exist_ok=True)
+
+ # Generate the updated source file at the corresponding path.
+ with open(updated_path, 'w') as f:
+ f.write(updated.code)
+
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser(
+ description="""Fix up source that uses the webrisk client library.
+
+The existing sources are NOT overwritten but are copied to output_dir with changes made.
+
+Note: This tool operates at a best-effort level at converting positional
+ parameters in client method calls to keyword based parameters.
+ Cases where it WILL FAIL include
+ A) * or ** expansion in a method call.
+ B) Calls via function or method alias (includes free function calls)
+ C) Indirect or dispatched calls (e.g. the method is looked up dynamically)
+
+ These all constitute false negatives. The tool will also detect false
+ positives when an API method shares a name with another method.
+""")
+ parser.add_argument(
+ '-d',
+ '--input-directory',
+ required=True,
+ dest='input_dir',
+ help='the input directory to walk for python files to fix up',
+ )
+ parser.add_argument(
+ '-o',
+ '--output-directory',
+ required=True,
+ dest='output_dir',
+ help='the directory to output files fixed via un-flattening',
+ )
+ args = parser.parse_args()
+ input_dir = pathlib.Path(args.input_dir)
+ output_dir = pathlib.Path(args.output_dir)
+ if not input_dir.is_dir():
+ print(
+ f"input directory '{input_dir}' does not exist or is not a directory",
+ file=sys.stderr,
+ )
+ sys.exit(-1)
+
+ if not output_dir.is_dir():
+ print(
+ f"output directory '{output_dir}' does not exist or is not a directory",
+ file=sys.stderr,
+ )
+ sys.exit(-1)
+
+ if os.listdir(output_dir):
+ print(
+ f"output directory '{output_dir}' is not empty",
+ file=sys.stderr,
+ )
+ sys.exit(-1)
+
+ fix_files(input_dir, output_dir)
diff --git a/owl-bot-staging/v1beta1/setup.py b/owl-bot-staging/v1beta1/setup.py
new file mode 100644
index 0000000..de54b53
--- /dev/null
+++ b/owl-bot-staging/v1beta1/setup.py
@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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 io
+import os
+import setuptools # type: ignore
+
+version = '0.1.0'
+
+package_root = os.path.abspath(os.path.dirname(__file__))
+
+readme_filename = os.path.join(package_root, 'README.rst')
+with io.open(readme_filename, encoding='utf-8') as readme_file:
+ readme = readme_file.read()
+
+setuptools.setup(
+ name='google-cloud-webrisk',
+ version=version,
+ long_description=readme,
+ packages=setuptools.PEP420PackageFinder.find(),
+ namespace_packages=('google', 'google.cloud'),
+ platforms='Posix; MacOS X; Windows',
+ include_package_data=True,
+ install_requires=(
+ 'google-api-core[grpc] >= 1.27.0, < 2.0.0dev',
+ 'libcst >= 0.2.5',
+ 'proto-plus >= 1.15.0',
+ 'packaging >= 14.3', ),
+ python_requires='>=3.6',
+ classifiers=[
+ 'Development Status :: 3 - Alpha',
+ 'Intended Audience :: Developers',
+ 'Operating System :: OS Independent',
+ 'Programming Language :: Python :: 3.6',
+ 'Programming Language :: Python :: 3.7',
+ 'Programming Language :: Python :: 3.8',
+ 'Topic :: Internet',
+ 'Topic :: Software Development :: Libraries :: Python Modules',
+ ],
+ zip_safe=False,
+)
diff --git a/owl-bot-staging/v1beta1/tests/__init__.py b/owl-bot-staging/v1beta1/tests/__init__.py
new file mode 100644
index 0000000..b54a5fc
--- /dev/null
+++ b/owl-bot-staging/v1beta1/tests/__init__.py
@@ -0,0 +1,16 @@
+
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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/owl-bot-staging/v1beta1/tests/unit/__init__.py b/owl-bot-staging/v1beta1/tests/unit/__init__.py
new file mode 100644
index 0000000..b54a5fc
--- /dev/null
+++ b/owl-bot-staging/v1beta1/tests/unit/__init__.py
@@ -0,0 +1,16 @@
+
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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/owl-bot-staging/v1beta1/tests/unit/gapic/__init__.py b/owl-bot-staging/v1beta1/tests/unit/gapic/__init__.py
new file mode 100644
index 0000000..b54a5fc
--- /dev/null
+++ b/owl-bot-staging/v1beta1/tests/unit/gapic/__init__.py
@@ -0,0 +1,16 @@
+
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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/owl-bot-staging/v1beta1/tests/unit/gapic/webrisk_v1beta1/__init__.py b/owl-bot-staging/v1beta1/tests/unit/gapic/webrisk_v1beta1/__init__.py
new file mode 100644
index 0000000..b54a5fc
--- /dev/null
+++ b/owl-bot-staging/v1beta1/tests/unit/gapic/webrisk_v1beta1/__init__.py
@@ -0,0 +1,16 @@
+
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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/owl-bot-staging/v1beta1/tests/unit/gapic/webrisk_v1beta1/test_web_risk_service_v1_beta1.py b/owl-bot-staging/v1beta1/tests/unit/gapic/webrisk_v1beta1/test_web_risk_service_v1_beta1.py
new file mode 100644
index 0000000..203d0f9
--- /dev/null
+++ b/owl-bot-staging/v1beta1/tests/unit/gapic/webrisk_v1beta1/test_web_risk_service_v1_beta1.py
@@ -0,0 +1,1437 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# 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 mock
+import packaging.version
+
+import grpc
+from grpc.experimental import aio
+import math
+import pytest
+from proto.marshal.rules.dates import DurationRule, TimestampRule
+
+
+from google.api_core import client_options
+from google.api_core import exceptions as core_exceptions
+from google.api_core import gapic_v1
+from google.api_core import grpc_helpers
+from google.api_core import grpc_helpers_async
+from google.auth import credentials as ga_credentials
+from google.auth.exceptions import MutualTLSChannelError
+from google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1 import WebRiskServiceV1Beta1AsyncClient
+from google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1 import WebRiskServiceV1Beta1Client
+from google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1 import transports
+from google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1.transports.base import _GOOGLE_AUTH_VERSION
+from google.cloud.webrisk_v1beta1.types import webrisk
+from google.oauth2 import service_account
+from google.protobuf import timestamp_pb2 # type: ignore
+import google.auth
+
+
+# TODO(busunkim): Once google-auth >= 1.25.0 is required transitively
+# through google-api-core:
+# - Delete the auth "less than" test cases
+# - Delete these pytest markers (Make the "greater than or equal to" tests the default).
+requires_google_auth_lt_1_25_0 = pytest.mark.skipif(
+ packaging.version.parse(_GOOGLE_AUTH_VERSION) >= packaging.version.parse("1.25.0"),
+ reason="This test requires google-auth < 1.25.0",
+)
+requires_google_auth_gte_1_25_0 = pytest.mark.skipif(
+ packaging.version.parse(_GOOGLE_AUTH_VERSION) < packaging.version.parse("1.25.0"),
+ reason="This test requires google-auth >= 1.25.0",
+)
+
+def client_cert_source_callback():
+ return b"cert bytes", b"key bytes"
+
+
+# If default endpoint is localhost, then default mtls endpoint will be the same.
+# This method modifies the default endpoint so the client can produce a different
+# mtls endpoint for endpoint testing purposes.
+def modify_default_endpoint(client):
+ return "foo.googleapis.com" if ("localhost" in client.DEFAULT_ENDPOINT) else client.DEFAULT_ENDPOINT
+
+
+def test__get_default_mtls_endpoint():
+ api_endpoint = "example.googleapis.com"
+ api_mtls_endpoint = "example.mtls.googleapis.com"
+ sandbox_endpoint = "example.sandbox.googleapis.com"
+ sandbox_mtls_endpoint = "example.mtls.sandbox.googleapis.com"
+ non_googleapi = "api.example.com"
+
+ assert WebRiskServiceV1Beta1Client._get_default_mtls_endpoint(None) is None
+ assert WebRiskServiceV1Beta1Client._get_default_mtls_endpoint(api_endpoint) == api_mtls_endpoint
+ assert WebRiskServiceV1Beta1Client._get_default_mtls_endpoint(api_mtls_endpoint) == api_mtls_endpoint
+ assert WebRiskServiceV1Beta1Client._get_default_mtls_endpoint(sandbox_endpoint) == sandbox_mtls_endpoint
+ assert WebRiskServiceV1Beta1Client._get_default_mtls_endpoint(sandbox_mtls_endpoint) == sandbox_mtls_endpoint
+ assert WebRiskServiceV1Beta1Client._get_default_mtls_endpoint(non_googleapi) == non_googleapi
+
+
+@pytest.mark.parametrize("client_class", [
+ WebRiskServiceV1Beta1Client,
+ WebRiskServiceV1Beta1AsyncClient,
+])
+def test_web_risk_service_v1_beta1_client_from_service_account_info(client_class):
+ creds = ga_credentials.AnonymousCredentials()
+ with mock.patch.object(service_account.Credentials, 'from_service_account_info') as factory:
+ factory.return_value = creds
+ info = {"valid": True}
+ client = client_class.from_service_account_info(info)
+ assert client.transport._credentials == creds
+ assert isinstance(client, client_class)
+
+ assert client.transport._host == 'webrisk.googleapis.com:443'
+
+
+@pytest.mark.parametrize("client_class", [
+ WebRiskServiceV1Beta1Client,
+ WebRiskServiceV1Beta1AsyncClient,
+])
+def test_web_risk_service_v1_beta1_client_service_account_always_use_jwt(client_class):
+ with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt:
+ creds = service_account.Credentials(None, None, None)
+ client = client_class(credentials=creds)
+ use_jwt.assert_not_called()
+
+
+@pytest.mark.parametrize("transport_class,transport_name", [
+ (transports.WebRiskServiceV1Beta1GrpcTransport, "grpc"),
+ (transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport, "grpc_asyncio"),
+])
+def test_web_risk_service_v1_beta1_client_service_account_always_use_jwt_true(transport_class, transport_name):
+ with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt:
+ creds = service_account.Credentials(None, None, None)
+ transport = transport_class(credentials=creds, always_use_jwt_access=True)
+ use_jwt.assert_called_once_with(True)
+
+
+@pytest.mark.parametrize("client_class", [
+ WebRiskServiceV1Beta1Client,
+ WebRiskServiceV1Beta1AsyncClient,
+])
+def test_web_risk_service_v1_beta1_client_from_service_account_file(client_class):
+ creds = ga_credentials.AnonymousCredentials()
+ with mock.patch.object(service_account.Credentials, 'from_service_account_file') as factory:
+ factory.return_value = creds
+ client = client_class.from_service_account_file("dummy/file/path.json")
+ assert client.transport._credentials == creds
+ assert isinstance(client, client_class)
+
+ client = client_class.from_service_account_json("dummy/file/path.json")
+ assert client.transport._credentials == creds
+ assert isinstance(client, client_class)
+
+ assert client.transport._host == 'webrisk.googleapis.com:443'
+
+
+def test_web_risk_service_v1_beta1_client_get_transport_class():
+ transport = WebRiskServiceV1Beta1Client.get_transport_class()
+ available_transports = [
+ transports.WebRiskServiceV1Beta1GrpcTransport,
+ ]
+ assert transport in available_transports
+
+ transport = WebRiskServiceV1Beta1Client.get_transport_class("grpc")
+ assert transport == transports.WebRiskServiceV1Beta1GrpcTransport
+
+
+@pytest.mark.parametrize("client_class,transport_class,transport_name", [
+ (WebRiskServiceV1Beta1Client, transports.WebRiskServiceV1Beta1GrpcTransport, "grpc"),
+ (WebRiskServiceV1Beta1AsyncClient, transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport, "grpc_asyncio"),
+])
+@mock.patch.object(WebRiskServiceV1Beta1Client, "DEFAULT_ENDPOINT", modify_default_endpoint(WebRiskServiceV1Beta1Client))
+@mock.patch.object(WebRiskServiceV1Beta1AsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(WebRiskServiceV1Beta1AsyncClient))
+def test_web_risk_service_v1_beta1_client_client_options(client_class, transport_class, transport_name):
+ # Check that if channel is provided we won't create a new one.
+ with mock.patch.object(WebRiskServiceV1Beta1Client, 'get_transport_class') as gtc:
+ transport = transport_class(
+ credentials=ga_credentials.AnonymousCredentials()
+ )
+ client = client_class(transport=transport)
+ gtc.assert_not_called()
+
+ # Check that if channel is provided via str we will create a new one.
+ with mock.patch.object(WebRiskServiceV1Beta1Client, 'get_transport_class') as gtc:
+ client = client_class(transport=transport_name)
+ gtc.assert_called()
+
+ # Check the case api_endpoint is provided.
+ options = client_options.ClientOptions(api_endpoint="squid.clam.whelk")
+ with mock.patch.object(transport_class, '__init__') as patched:
+ patched.return_value = None
+ client = client_class(client_options=options)
+ patched.assert_called_once_with(
+ credentials=None,
+ credentials_file=None,
+ host="squid.clam.whelk",
+ scopes=None,
+ client_cert_source_for_mtls=None,
+ quota_project_id=None,
+ client_info=transports.base.DEFAULT_CLIENT_INFO,
+ )
+
+ # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is
+ # "never".
+ with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}):
+ with mock.patch.object(transport_class, '__init__') as patched:
+ patched.return_value = None
+ client = client_class()
+ patched.assert_called_once_with(
+ credentials=None,
+ credentials_file=None,
+ host=client.DEFAULT_ENDPOINT,
+ scopes=None,
+ client_cert_source_for_mtls=None,
+ quota_project_id=None,
+ client_info=transports.base.DEFAULT_CLIENT_INFO,
+ )
+
+ # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is
+ # "always".
+ with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}):
+ with mock.patch.object(transport_class, '__init__') as patched:
+ patched.return_value = None
+ client = client_class()
+ patched.assert_called_once_with(
+ credentials=None,
+ credentials_file=None,
+ host=client.DEFAULT_MTLS_ENDPOINT,
+ scopes=None,
+ client_cert_source_for_mtls=None,
+ quota_project_id=None,
+ client_info=transports.base.DEFAULT_CLIENT_INFO,
+ )
+
+ # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has
+ # unsupported value.
+ with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}):
+ with pytest.raises(MutualTLSChannelError):
+ client = client_class()
+
+ # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value.
+ with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"}):
+ with pytest.raises(ValueError):
+ client = client_class()
+
+ # Check the case quota_project_id is provided
+ options = client_options.ClientOptions(quota_project_id="octopus")
+ with mock.patch.object(transport_class, '__init__') as patched:
+ patched.return_value = None
+ client = client_class(client_options=options)
+ patched.assert_called_once_with(
+ credentials=None,
+ credentials_file=None,
+ host=client.DEFAULT_ENDPOINT,
+ scopes=None,
+ client_cert_source_for_mtls=None,
+ quota_project_id="octopus",
+ client_info=transports.base.DEFAULT_CLIENT_INFO,
+ )
+
+@pytest.mark.parametrize("client_class,transport_class,transport_name,use_client_cert_env", [
+ (WebRiskServiceV1Beta1Client, transports.WebRiskServiceV1Beta1GrpcTransport, "grpc", "true"),
+ (WebRiskServiceV1Beta1AsyncClient, transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport, "grpc_asyncio", "true"),
+ (WebRiskServiceV1Beta1Client, transports.WebRiskServiceV1Beta1GrpcTransport, "grpc", "false"),
+ (WebRiskServiceV1Beta1AsyncClient, transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport, "grpc_asyncio", "false"),
+])
+@mock.patch.object(WebRiskServiceV1Beta1Client, "DEFAULT_ENDPOINT", modify_default_endpoint(WebRiskServiceV1Beta1Client))
+@mock.patch.object(WebRiskServiceV1Beta1AsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(WebRiskServiceV1Beta1AsyncClient))
+@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"})
+def test_web_risk_service_v1_beta1_client_mtls_env_auto(client_class, transport_class, transport_name, use_client_cert_env):
+ # This tests the endpoint autoswitch behavior. Endpoint is autoswitched to the default
+ # mtls endpoint, if GOOGLE_API_USE_CLIENT_CERTIFICATE is "true" and client cert exists.
+
+ # Check the case client_cert_source is provided. Whether client cert is used depends on
+ # GOOGLE_API_USE_CLIENT_CERTIFICATE value.
+ with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}):
+ options = client_options.ClientOptions(client_cert_source=client_cert_source_callback)
+ with mock.patch.object(transport_class, '__init__') as patched:
+ patched.return_value = None
+ client = client_class(client_options=options)
+
+ if use_client_cert_env == "false":
+ expected_client_cert_source = None
+ expected_host = client.DEFAULT_ENDPOINT
+ else:
+ expected_client_cert_source = client_cert_source_callback
+ expected_host = client.DEFAULT_MTLS_ENDPOINT
+
+ patched.assert_called_once_with(
+ credentials=None,
+ credentials_file=None,
+ host=expected_host,
+ scopes=None,
+ client_cert_source_for_mtls=expected_client_cert_source,
+ quota_project_id=None,
+ client_info=transports.base.DEFAULT_CLIENT_INFO,
+ )
+
+ # Check the case ADC client cert is provided. Whether client cert is used depends on
+ # GOOGLE_API_USE_CLIENT_CERTIFICATE value.
+ with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}):
+ with mock.patch.object(transport_class, '__init__') as patched:
+ with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=True):
+ with mock.patch('google.auth.transport.mtls.default_client_cert_source', return_value=client_cert_source_callback):
+ if use_client_cert_env == "false":
+ expected_host = client.DEFAULT_ENDPOINT
+ expected_client_cert_source = None
+ else:
+ expected_host = client.DEFAULT_MTLS_ENDPOINT
+ expected_client_cert_source = client_cert_source_callback
+
+ patched.return_value = None
+ client = client_class()
+ patched.assert_called_once_with(
+ credentials=None,
+ credentials_file=None,
+ host=expected_host,
+ scopes=None,
+ client_cert_source_for_mtls=expected_client_cert_source,
+ quota_project_id=None,
+ client_info=transports.base.DEFAULT_CLIENT_INFO,
+ )
+
+ # Check the case client_cert_source and ADC client cert are not provided.
+ with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}):
+ with mock.patch.object(transport_class, '__init__') as patched:
+ with mock.patch("google.auth.transport.mtls.has_default_client_cert_source", return_value=False):
+ patched.return_value = None
+ client = client_class()
+ patched.assert_called_once_with(
+ credentials=None,
+ credentials_file=None,
+ host=client.DEFAULT_ENDPOINT,
+ scopes=None,
+ client_cert_source_for_mtls=None,
+ quota_project_id=None,
+ client_info=transports.base.DEFAULT_CLIENT_INFO,
+ )
+
+
+@pytest.mark.parametrize("client_class,transport_class,transport_name", [
+ (WebRiskServiceV1Beta1Client, transports.WebRiskServiceV1Beta1GrpcTransport, "grpc"),
+ (WebRiskServiceV1Beta1AsyncClient, transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport, "grpc_asyncio"),
+])
+def test_web_risk_service_v1_beta1_client_client_options_scopes(client_class, transport_class, transport_name):
+ # Check the case scopes are provided.
+ options = client_options.ClientOptions(
+ scopes=["1", "2"],
+ )
+ with mock.patch.object(transport_class, '__init__') as patched:
+ patched.return_value = None
+ client = client_class(client_options=options)
+ patched.assert_called_once_with(
+ credentials=None,
+ credentials_file=None,
+ host=client.DEFAULT_ENDPOINT,
+ scopes=["1", "2"],
+ client_cert_source_for_mtls=None,
+ quota_project_id=None,
+ client_info=transports.base.DEFAULT_CLIENT_INFO,
+ )
+
+@pytest.mark.parametrize("client_class,transport_class,transport_name", [
+ (WebRiskServiceV1Beta1Client, transports.WebRiskServiceV1Beta1GrpcTransport, "grpc"),
+ (WebRiskServiceV1Beta1AsyncClient, transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport, "grpc_asyncio"),
+])
+def test_web_risk_service_v1_beta1_client_client_options_credentials_file(client_class, transport_class, transport_name):
+ # Check the case credentials file is provided.
+ options = client_options.ClientOptions(
+ credentials_file="credentials.json"
+ )
+ with mock.patch.object(transport_class, '__init__') as patched:
+ patched.return_value = None
+ client = client_class(client_options=options)
+ patched.assert_called_once_with(
+ credentials=None,
+ credentials_file="credentials.json",
+ host=client.DEFAULT_ENDPOINT,
+ scopes=None,
+ client_cert_source_for_mtls=None,
+ quota_project_id=None,
+ client_info=transports.base.DEFAULT_CLIENT_INFO,
+ )
+
+
+def test_web_risk_service_v1_beta1_client_client_options_from_dict():
+ with mock.patch('google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1.transports.WebRiskServiceV1Beta1GrpcTransport.__init__') as grpc_transport:
+ grpc_transport.return_value = None
+ client = WebRiskServiceV1Beta1Client(
+ client_options={'api_endpoint': 'squid.clam.whelk'}
+ )
+ grpc_transport.assert_called_once_with(
+ credentials=None,
+ credentials_file=None,
+ host="squid.clam.whelk",
+ scopes=None,
+ client_cert_source_for_mtls=None,
+ quota_project_id=None,
+ client_info=transports.base.DEFAULT_CLIENT_INFO,
+ )
+
+
+def test_compute_threat_list_diff(transport: str = 'grpc', request_type=webrisk.ComputeThreatListDiffRequest):
+ client = WebRiskServiceV1Beta1Client(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport=transport,
+ )
+
+ # Everything is optional in proto3 as far as the runtime is concerned,
+ # and we are mocking out the actual API, so just send an empty request.
+ request = request_type()
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.compute_threat_list_diff),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value = webrisk.ComputeThreatListDiffResponse(
+ response_type=webrisk.ComputeThreatListDiffResponse.ResponseType.DIFF,
+ new_version_token=b'new_version_token_blob',
+ )
+ response = client.compute_threat_list_diff(request)
+
+ # Establish that the underlying gRPC stub method was called.
+ assert len(call.mock_calls) == 1
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == webrisk.ComputeThreatListDiffRequest()
+
+ # Establish that the response is the type that we expect.
+ assert isinstance(response, webrisk.ComputeThreatListDiffResponse)
+ assert response.response_type == webrisk.ComputeThreatListDiffResponse.ResponseType.DIFF
+ assert response.new_version_token == b'new_version_token_blob'
+
+
+def test_compute_threat_list_diff_from_dict():
+ test_compute_threat_list_diff(request_type=dict)
+
+
+def test_compute_threat_list_diff_empty_call():
+ # This test is a coverage failsafe to make sure that totally empty calls,
+ # i.e. request == None and no flattened fields passed, work.
+ client = WebRiskServiceV1Beta1Client(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport='grpc',
+ )
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.compute_threat_list_diff),
+ '__call__') as call:
+ client.compute_threat_list_diff()
+ call.assert_called()
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == webrisk.ComputeThreatListDiffRequest()
+
+
+@pytest.mark.asyncio
+async def test_compute_threat_list_diff_async(transport: str = 'grpc_asyncio', request_type=webrisk.ComputeThreatListDiffRequest):
+ client = WebRiskServiceV1Beta1AsyncClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport=transport,
+ )
+
+ # Everything is optional in proto3 as far as the runtime is concerned,
+ # and we are mocking out the actual API, so just send an empty request.
+ request = request_type()
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.compute_threat_list_diff),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(webrisk.ComputeThreatListDiffResponse(
+ response_type=webrisk.ComputeThreatListDiffResponse.ResponseType.DIFF,
+ new_version_token=b'new_version_token_blob',
+ ))
+ response = await client.compute_threat_list_diff(request)
+
+ # Establish that the underlying gRPC stub method was called.
+ assert len(call.mock_calls)
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == webrisk.ComputeThreatListDiffRequest()
+
+ # Establish that the response is the type that we expect.
+ assert isinstance(response, webrisk.ComputeThreatListDiffResponse)
+ assert response.response_type == webrisk.ComputeThreatListDiffResponse.ResponseType.DIFF
+ assert response.new_version_token == b'new_version_token_blob'
+
+
+@pytest.mark.asyncio
+async def test_compute_threat_list_diff_async_from_dict():
+ await test_compute_threat_list_diff_async(request_type=dict)
+
+
+def test_compute_threat_list_diff_flattened():
+ client = WebRiskServiceV1Beta1Client(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.compute_threat_list_diff),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value = webrisk.ComputeThreatListDiffResponse()
+ # Call the method with a truthy value for each flattened field,
+ # using the keyword arguments to the method.
+ client.compute_threat_list_diff(
+ threat_type=webrisk.ThreatType.MALWARE,
+ version_token=b'version_token_blob',
+ constraints=webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687),
+ )
+
+ # Establish that the underlying call was made with the expected
+ # request object values.
+ assert len(call.mock_calls) == 1
+ _, args, _ = call.mock_calls[0]
+ assert args[0].threat_type == webrisk.ThreatType.MALWARE
+ assert args[0].version_token == b'version_token_blob'
+ assert args[0].constraints == webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687)
+
+
+def test_compute_threat_list_diff_flattened_error():
+ client = WebRiskServiceV1Beta1Client(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Attempting to call a method with both a request object and flattened
+ # fields is an error.
+ with pytest.raises(ValueError):
+ client.compute_threat_list_diff(
+ webrisk.ComputeThreatListDiffRequest(),
+ threat_type=webrisk.ThreatType.MALWARE,
+ version_token=b'version_token_blob',
+ constraints=webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687),
+ )
+
+
+@pytest.mark.asyncio
+async def test_compute_threat_list_diff_flattened_async():
+ client = WebRiskServiceV1Beta1AsyncClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.compute_threat_list_diff),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value = webrisk.ComputeThreatListDiffResponse()
+
+ call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(webrisk.ComputeThreatListDiffResponse())
+ # Call the method with a truthy value for each flattened field,
+ # using the keyword arguments to the method.
+ response = await client.compute_threat_list_diff(
+ threat_type=webrisk.ThreatType.MALWARE,
+ version_token=b'version_token_blob',
+ constraints=webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687),
+ )
+
+ # Establish that the underlying call was made with the expected
+ # request object values.
+ assert len(call.mock_calls)
+ _, args, _ = call.mock_calls[0]
+ assert args[0].threat_type == webrisk.ThreatType.MALWARE
+ assert args[0].version_token == b'version_token_blob'
+ assert args[0].constraints == webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687)
+
+
+@pytest.mark.asyncio
+async def test_compute_threat_list_diff_flattened_error_async():
+ client = WebRiskServiceV1Beta1AsyncClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Attempting to call a method with both a request object and flattened
+ # fields is an error.
+ with pytest.raises(ValueError):
+ await client.compute_threat_list_diff(
+ webrisk.ComputeThreatListDiffRequest(),
+ threat_type=webrisk.ThreatType.MALWARE,
+ version_token=b'version_token_blob',
+ constraints=webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687),
+ )
+
+
+def test_search_uris(transport: str = 'grpc', request_type=webrisk.SearchUrisRequest):
+ client = WebRiskServiceV1Beta1Client(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport=transport,
+ )
+
+ # Everything is optional in proto3 as far as the runtime is concerned,
+ # and we are mocking out the actual API, so just send an empty request.
+ request = request_type()
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.search_uris),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value = webrisk.SearchUrisResponse(
+ )
+ response = client.search_uris(request)
+
+ # Establish that the underlying gRPC stub method was called.
+ assert len(call.mock_calls) == 1
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == webrisk.SearchUrisRequest()
+
+ # Establish that the response is the type that we expect.
+ assert isinstance(response, webrisk.SearchUrisResponse)
+
+
+def test_search_uris_from_dict():
+ test_search_uris(request_type=dict)
+
+
+def test_search_uris_empty_call():
+ # This test is a coverage failsafe to make sure that totally empty calls,
+ # i.e. request == None and no flattened fields passed, work.
+ client = WebRiskServiceV1Beta1Client(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport='grpc',
+ )
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.search_uris),
+ '__call__') as call:
+ client.search_uris()
+ call.assert_called()
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == webrisk.SearchUrisRequest()
+
+
+@pytest.mark.asyncio
+async def test_search_uris_async(transport: str = 'grpc_asyncio', request_type=webrisk.SearchUrisRequest):
+ client = WebRiskServiceV1Beta1AsyncClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport=transport,
+ )
+
+ # Everything is optional in proto3 as far as the runtime is concerned,
+ # and we are mocking out the actual API, so just send an empty request.
+ request = request_type()
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.search_uris),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(webrisk.SearchUrisResponse(
+ ))
+ response = await client.search_uris(request)
+
+ # Establish that the underlying gRPC stub method was called.
+ assert len(call.mock_calls)
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == webrisk.SearchUrisRequest()
+
+ # Establish that the response is the type that we expect.
+ assert isinstance(response, webrisk.SearchUrisResponse)
+
+
+@pytest.mark.asyncio
+async def test_search_uris_async_from_dict():
+ await test_search_uris_async(request_type=dict)
+
+
+def test_search_uris_flattened():
+ client = WebRiskServiceV1Beta1Client(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.search_uris),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value = webrisk.SearchUrisResponse()
+ # Call the method with a truthy value for each flattened field,
+ # using the keyword arguments to the method.
+ client.search_uris(
+ uri='uri_value',
+ threat_types=[webrisk.ThreatType.MALWARE],
+ )
+
+ # Establish that the underlying call was made with the expected
+ # request object values.
+ assert len(call.mock_calls) == 1
+ _, args, _ = call.mock_calls[0]
+ assert args[0].uri == 'uri_value'
+ assert args[0].threat_types == [webrisk.ThreatType.MALWARE]
+
+
+def test_search_uris_flattened_error():
+ client = WebRiskServiceV1Beta1Client(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Attempting to call a method with both a request object and flattened
+ # fields is an error.
+ with pytest.raises(ValueError):
+ client.search_uris(
+ webrisk.SearchUrisRequest(),
+ uri='uri_value',
+ threat_types=[webrisk.ThreatType.MALWARE],
+ )
+
+
+@pytest.mark.asyncio
+async def test_search_uris_flattened_async():
+ client = WebRiskServiceV1Beta1AsyncClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.search_uris),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value = webrisk.SearchUrisResponse()
+
+ call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(webrisk.SearchUrisResponse())
+ # Call the method with a truthy value for each flattened field,
+ # using the keyword arguments to the method.
+ response = await client.search_uris(
+ uri='uri_value',
+ threat_types=[webrisk.ThreatType.MALWARE],
+ )
+
+ # Establish that the underlying call was made with the expected
+ # request object values.
+ assert len(call.mock_calls)
+ _, args, _ = call.mock_calls[0]
+ assert args[0].uri == 'uri_value'
+ assert args[0].threat_types == [webrisk.ThreatType.MALWARE]
+
+
+@pytest.mark.asyncio
+async def test_search_uris_flattened_error_async():
+ client = WebRiskServiceV1Beta1AsyncClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Attempting to call a method with both a request object and flattened
+ # fields is an error.
+ with pytest.raises(ValueError):
+ await client.search_uris(
+ webrisk.SearchUrisRequest(),
+ uri='uri_value',
+ threat_types=[webrisk.ThreatType.MALWARE],
+ )
+
+
+def test_search_hashes(transport: str = 'grpc', request_type=webrisk.SearchHashesRequest):
+ client = WebRiskServiceV1Beta1Client(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport=transport,
+ )
+
+ # Everything is optional in proto3 as far as the runtime is concerned,
+ # and we are mocking out the actual API, so just send an empty request.
+ request = request_type()
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.search_hashes),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value = webrisk.SearchHashesResponse(
+ )
+ response = client.search_hashes(request)
+
+ # Establish that the underlying gRPC stub method was called.
+ assert len(call.mock_calls) == 1
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == webrisk.SearchHashesRequest()
+
+ # Establish that the response is the type that we expect.
+ assert isinstance(response, webrisk.SearchHashesResponse)
+
+
+def test_search_hashes_from_dict():
+ test_search_hashes(request_type=dict)
+
+
+def test_search_hashes_empty_call():
+ # This test is a coverage failsafe to make sure that totally empty calls,
+ # i.e. request == None and no flattened fields passed, work.
+ client = WebRiskServiceV1Beta1Client(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport='grpc',
+ )
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.search_hashes),
+ '__call__') as call:
+ client.search_hashes()
+ call.assert_called()
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == webrisk.SearchHashesRequest()
+
+
+@pytest.mark.asyncio
+async def test_search_hashes_async(transport: str = 'grpc_asyncio', request_type=webrisk.SearchHashesRequest):
+ client = WebRiskServiceV1Beta1AsyncClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport=transport,
+ )
+
+ # Everything is optional in proto3 as far as the runtime is concerned,
+ # and we are mocking out the actual API, so just send an empty request.
+ request = request_type()
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.search_hashes),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(webrisk.SearchHashesResponse(
+ ))
+ response = await client.search_hashes(request)
+
+ # Establish that the underlying gRPC stub method was called.
+ assert len(call.mock_calls)
+ _, args, _ = call.mock_calls[0]
+ assert args[0] == webrisk.SearchHashesRequest()
+
+ # Establish that the response is the type that we expect.
+ assert isinstance(response, webrisk.SearchHashesResponse)
+
+
+@pytest.mark.asyncio
+async def test_search_hashes_async_from_dict():
+ await test_search_hashes_async(request_type=dict)
+
+
+def test_search_hashes_flattened():
+ client = WebRiskServiceV1Beta1Client(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.search_hashes),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value = webrisk.SearchHashesResponse()
+ # Call the method with a truthy value for each flattened field,
+ # using the keyword arguments to the method.
+ client.search_hashes(
+ hash_prefix=b'hash_prefix_blob',
+ threat_types=[webrisk.ThreatType.MALWARE],
+ )
+
+ # Establish that the underlying call was made with the expected
+ # request object values.
+ assert len(call.mock_calls) == 1
+ _, args, _ = call.mock_calls[0]
+ assert args[0].hash_prefix == b'hash_prefix_blob'
+ assert args[0].threat_types == [webrisk.ThreatType.MALWARE]
+
+
+def test_search_hashes_flattened_error():
+ client = WebRiskServiceV1Beta1Client(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Attempting to call a method with both a request object and flattened
+ # fields is an error.
+ with pytest.raises(ValueError):
+ client.search_hashes(
+ webrisk.SearchHashesRequest(),
+ hash_prefix=b'hash_prefix_blob',
+ threat_types=[webrisk.ThreatType.MALWARE],
+ )
+
+
+@pytest.mark.asyncio
+async def test_search_hashes_flattened_async():
+ client = WebRiskServiceV1Beta1AsyncClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Mock the actual call within the gRPC stub, and fake the request.
+ with mock.patch.object(
+ type(client.transport.search_hashes),
+ '__call__') as call:
+ # Designate an appropriate return value for the call.
+ call.return_value = webrisk.SearchHashesResponse()
+
+ call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(webrisk.SearchHashesResponse())
+ # Call the method with a truthy value for each flattened field,
+ # using the keyword arguments to the method.
+ response = await client.search_hashes(
+ hash_prefix=b'hash_prefix_blob',
+ threat_types=[webrisk.ThreatType.MALWARE],
+ )
+
+ # Establish that the underlying call was made with the expected
+ # request object values.
+ assert len(call.mock_calls)
+ _, args, _ = call.mock_calls[0]
+ assert args[0].hash_prefix == b'hash_prefix_blob'
+ assert args[0].threat_types == [webrisk.ThreatType.MALWARE]
+
+
+@pytest.mark.asyncio
+async def test_search_hashes_flattened_error_async():
+ client = WebRiskServiceV1Beta1AsyncClient(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Attempting to call a method with both a request object and flattened
+ # fields is an error.
+ with pytest.raises(ValueError):
+ await client.search_hashes(
+ webrisk.SearchHashesRequest(),
+ hash_prefix=b'hash_prefix_blob',
+ threat_types=[webrisk.ThreatType.MALWARE],
+ )
+
+
+def test_credentials_transport_error():
+ # It is an error to provide credentials and a transport instance.
+ transport = transports.WebRiskServiceV1Beta1GrpcTransport(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+ with pytest.raises(ValueError):
+ client = WebRiskServiceV1Beta1Client(
+ credentials=ga_credentials.AnonymousCredentials(),
+ transport=transport,
+ )
+
+ # It is an error to provide a credentials file and a transport instance.
+ transport = transports.WebRiskServiceV1Beta1GrpcTransport(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+ with pytest.raises(ValueError):
+ client = WebRiskServiceV1Beta1Client(
+ client_options={"credentials_file": "credentials.json"},
+ transport=transport,
+ )
+
+ # It is an error to provide scopes and a transport instance.
+ transport = transports.WebRiskServiceV1Beta1GrpcTransport(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+ with pytest.raises(ValueError):
+ client = WebRiskServiceV1Beta1Client(
+ client_options={"scopes": ["1", "2"]},
+ transport=transport,
+ )
+
+
+def test_transport_instance():
+ # A client may be instantiated with a custom transport instance.
+ transport = transports.WebRiskServiceV1Beta1GrpcTransport(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+ client = WebRiskServiceV1Beta1Client(transport=transport)
+ assert client.transport is transport
+
+def test_transport_get_channel():
+ # A client may be instantiated with a custom transport instance.
+ transport = transports.WebRiskServiceV1Beta1GrpcTransport(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+ channel = transport.grpc_channel
+ assert channel
+
+ transport = transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+ channel = transport.grpc_channel
+ assert channel
+
+@pytest.mark.parametrize("transport_class", [
+ transports.WebRiskServiceV1Beta1GrpcTransport,
+ transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport,
+])
+def test_transport_adc(transport_class):
+ # Test default credentials are used if not provided.
+ with mock.patch.object(google.auth, 'default') as adc:
+ adc.return_value = (ga_credentials.AnonymousCredentials(), None)
+ transport_class()
+ adc.assert_called_once()
+
+def test_transport_grpc_default():
+ # A client should use the gRPC transport by default.
+ client = WebRiskServiceV1Beta1Client(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+ assert isinstance(
+ client.transport,
+ transports.WebRiskServiceV1Beta1GrpcTransport,
+ )
+
+def test_web_risk_service_v1_beta1_base_transport_error():
+ # Passing both a credentials object and credentials_file should raise an error
+ with pytest.raises(core_exceptions.DuplicateCredentialArgs):
+ transport = transports.WebRiskServiceV1Beta1Transport(
+ credentials=ga_credentials.AnonymousCredentials(),
+ credentials_file="credentials.json"
+ )
+
+
+def test_web_risk_service_v1_beta1_base_transport():
+ # Instantiate the base transport.
+ with mock.patch('google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1.transports.WebRiskServiceV1Beta1Transport.__init__') as Transport:
+ Transport.return_value = None
+ transport = transports.WebRiskServiceV1Beta1Transport(
+ credentials=ga_credentials.AnonymousCredentials(),
+ )
+
+ # Every method on the transport should just blindly
+ # raise NotImplementedError.
+ methods = (
+ 'compute_threat_list_diff',
+ 'search_uris',
+ 'search_hashes',
+ )
+ for method in methods:
+ with pytest.raises(NotImplementedError):
+ getattr(transport, method)(request=object())
+
+
+@requires_google_auth_gte_1_25_0
+def test_web_risk_service_v1_beta1_base_transport_with_credentials_file():
+ # Instantiate the base transport with a credentials file
+ with mock.patch.object(google.auth, 'load_credentials_from_file', autospec=True) as load_creds, mock.patch('google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1.transports.WebRiskServiceV1Beta1Transport._prep_wrapped_messages') as Transport:
+ Transport.return_value = None
+ load_creds.return_value = (ga_credentials.AnonymousCredentials(), None)
+ transport = transports.WebRiskServiceV1Beta1Transport(
+ credentials_file="credentials.json",
+ quota_project_id="octopus",
+ )
+ load_creds.assert_called_once_with("credentials.json",
+ scopes=None,
+ default_scopes=(
+ 'https://www.googleapis.com/auth/cloud-platform',
+),
+ quota_project_id="octopus",
+ )
+
+
+@requires_google_auth_lt_1_25_0
+def test_web_risk_service_v1_beta1_base_transport_with_credentials_file_old_google_auth():
+ # Instantiate the base transport with a credentials file
+ with mock.patch.object(google.auth, 'load_credentials_from_file', autospec=True) as load_creds, mock.patch('google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1.transports.WebRiskServiceV1Beta1Transport._prep_wrapped_messages') as Transport:
+ Transport.return_value = None
+ load_creds.return_value = (ga_credentials.AnonymousCredentials(), None)
+ transport = transports.WebRiskServiceV1Beta1Transport(
+ credentials_file="credentials.json",
+ quota_project_id="octopus",
+ )
+ load_creds.assert_called_once_with("credentials.json", scopes=(
+ 'https://www.googleapis.com/auth/cloud-platform',
+ ),
+ quota_project_id="octopus",
+ )
+
+
+def test_web_risk_service_v1_beta1_base_transport_with_adc():
+ # Test the default credentials are used if credentials and credentials_file are None.
+ with mock.patch.object(google.auth, 'default', autospec=True) as adc, mock.patch('google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1.transports.WebRiskServiceV1Beta1Transport._prep_wrapped_messages') as Transport:
+ Transport.return_value = None
+ adc.return_value = (ga_credentials.AnonymousCredentials(), None)
+ transport = transports.WebRiskServiceV1Beta1Transport()
+ adc.assert_called_once()
+
+
+@requires_google_auth_gte_1_25_0
+def test_web_risk_service_v1_beta1_auth_adc():
+ # If no credentials are provided, we should use ADC credentials.
+ with mock.patch.object(google.auth, 'default', autospec=True) as adc:
+ adc.return_value = (ga_credentials.AnonymousCredentials(), None)
+ WebRiskServiceV1Beta1Client()
+ adc.assert_called_once_with(
+ scopes=None,
+ default_scopes=(
+ 'https://www.googleapis.com/auth/cloud-platform',
+),
+ quota_project_id=None,
+ )
+
+
+@requires_google_auth_lt_1_25_0
+def test_web_risk_service_v1_beta1_auth_adc_old_google_auth():
+ # If no credentials are provided, we should use ADC credentials.
+ with mock.patch.object(google.auth, 'default', autospec=True) as adc:
+ adc.return_value = (ga_credentials.AnonymousCredentials(), None)
+ WebRiskServiceV1Beta1Client()
+ adc.assert_called_once_with(
+ scopes=( 'https://www.googleapis.com/auth/cloud-platform',),
+ quota_project_id=None,
+ )
+
+
+@pytest.mark.parametrize(
+ "transport_class",
+ [
+ transports.WebRiskServiceV1Beta1GrpcTransport,
+ transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport,
+ ],
+)
+@requires_google_auth_gte_1_25_0
+def test_web_risk_service_v1_beta1_transport_auth_adc(transport_class):
+ # If credentials and host are not provided, the transport class should use
+ # ADC credentials.
+ with mock.patch.object(google.auth, 'default', autospec=True) as adc:
+ adc.return_value = (ga_credentials.AnonymousCredentials(), None)
+ transport_class(quota_project_id="octopus", scopes=["1", "2"])
+ adc.assert_called_once_with(
+ scopes=["1", "2"],
+ default_scopes=( 'https://www.googleapis.com/auth/cloud-platform',),
+ quota_project_id="octopus",
+ )
+
+
+@pytest.mark.parametrize(
+ "transport_class",
+ [
+ transports.WebRiskServiceV1Beta1GrpcTransport,
+ transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport,
+ ],
+)
+@requires_google_auth_lt_1_25_0
+def test_web_risk_service_v1_beta1_transport_auth_adc_old_google_auth(transport_class):
+ # If credentials and host are not provided, the transport class should use
+ # ADC credentials.
+ with mock.patch.object(google.auth, "default", autospec=True) as adc:
+ adc.return_value = (ga_credentials.AnonymousCredentials(), None)
+ transport_class(quota_project_id="octopus")
+ adc.assert_called_once_with(scopes=(
+ 'https://www.googleapis.com/auth/cloud-platform',
+),
+ quota_project_id="octopus",
+ )
+
+
+@pytest.mark.parametrize(
+ "transport_class,grpc_helpers",
+ [
+ (transports.WebRiskServiceV1Beta1GrpcTransport, grpc_helpers),
+ (transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport, grpc_helpers_async)
+ ],
+)
+def test_web_risk_service_v1_beta1_transport_create_channel(transport_class, grpc_helpers):
+ # If credentials and host are not provided, the transport class should use
+ # ADC credentials.
+ with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch.object(
+ grpc_helpers, "create_channel", autospec=True
+ ) as create_channel:
+ creds = ga_credentials.AnonymousCredentials()
+ adc.return_value = (creds, None)
+ transport_class(
+ quota_project_id="octopus",
+ scopes=["1", "2"]
+ )
+
+ create_channel.assert_called_with(
+ "webrisk.googleapis.com:443",
+ credentials=creds,
+ credentials_file=None,
+ quota_project_id="octopus",
+ default_scopes=(
+ 'https://www.googleapis.com/auth/cloud-platform',
+),
+ scopes=["1", "2"],
+ default_host="webrisk.googleapis.com",
+ ssl_credentials=None,
+ options=[
+ ("grpc.max_send_message_length", -1),
+ ("grpc.max_receive_message_length", -1),
+ ],
+ )
+
+
+@pytest.mark.parametrize("transport_class", [transports.WebRiskServiceV1Beta1GrpcTransport, transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport])
+def test_web_risk_service_v1_beta1_grpc_transport_client_cert_source_for_mtls(
+ transport_class
+):
+ cred = ga_credentials.AnonymousCredentials()
+
+ # Check ssl_channel_credentials is used if provided.
+ with mock.patch.object(transport_class, "create_channel") as mock_create_channel:
+ mock_ssl_channel_creds = mock.Mock()
+ transport_class(
+ host="squid.clam.whelk",
+ credentials=cred,
+ ssl_channel_credentials=mock_ssl_channel_creds
+ )
+ mock_create_channel.assert_called_once_with(
+ "squid.clam.whelk:443",
+ credentials=cred,
+ credentials_file=None,
+ scopes=None,
+ ssl_credentials=mock_ssl_channel_creds,
+ quota_project_id=None,
+ options=[
+ ("grpc.max_send_message_length", -1),
+ ("grpc.max_receive_message_length", -1),
+ ],
+ )
+
+ # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls
+ # is used.
+ with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()):
+ with mock.patch("grpc.ssl_channel_credentials") as mock_ssl_cred:
+ transport_class(
+ credentials=cred,
+ client_cert_source_for_mtls=client_cert_source_callback
+ )
+ expected_cert, expected_key = client_cert_source_callback()
+ mock_ssl_cred.assert_called_once_with(
+ certificate_chain=expected_cert,
+ private_key=expected_key
+ )
+
+
+def test_web_risk_service_v1_beta1_host_no_port():
+ client = WebRiskServiceV1Beta1Client(
+ credentials=ga_credentials.AnonymousCredentials(),
+ client_options=client_options.ClientOptions(api_endpoint='webrisk.googleapis.com'),
+ )
+ assert client.transport._host == 'webrisk.googleapis.com:443'
+
+
+def test_web_risk_service_v1_beta1_host_with_port():
+ client = WebRiskServiceV1Beta1Client(
+ credentials=ga_credentials.AnonymousCredentials(),
+ client_options=client_options.ClientOptions(api_endpoint='webrisk.googleapis.com:8000'),
+ )
+ assert client.transport._host == 'webrisk.googleapis.com:8000'
+
+def test_web_risk_service_v1_beta1_grpc_transport_channel():
+ channel = grpc.secure_channel('http://localhost/', grpc.local_channel_credentials())
+
+ # Check that channel is used if provided.
+ transport = transports.WebRiskServiceV1Beta1GrpcTransport(
+ host="squid.clam.whelk",
+ channel=channel,
+ )
+ assert transport.grpc_channel == channel
+ assert transport._host == "squid.clam.whelk:443"
+ assert transport._ssl_channel_credentials == None
+
+
+def test_web_risk_service_v1_beta1_grpc_asyncio_transport_channel():
+ channel = aio.secure_channel('http://localhost/', grpc.local_channel_credentials())
+
+ # Check that channel is used if provided.
+ transport = transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport(
+ host="squid.clam.whelk",
+ channel=channel,
+ )
+ assert transport.grpc_channel == channel
+ assert transport._host == "squid.clam.whelk:443"
+ assert transport._ssl_channel_credentials == None
+
+
+# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are
+# removed from grpc/grpc_asyncio transport constructor.
+@pytest.mark.parametrize("transport_class", [transports.WebRiskServiceV1Beta1GrpcTransport, transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport])
+def test_web_risk_service_v1_beta1_transport_channel_mtls_with_client_cert_source(
+ transport_class
+):
+ with mock.patch("grpc.ssl_channel_credentials", autospec=True) as grpc_ssl_channel_cred:
+ with mock.patch.object(transport_class, "create_channel") as grpc_create_channel:
+ mock_ssl_cred = mock.Mock()
+ grpc_ssl_channel_cred.return_value = mock_ssl_cred
+
+ mock_grpc_channel = mock.Mock()
+ grpc_create_channel.return_value = mock_grpc_channel
+
+ cred = ga_credentials.AnonymousCredentials()
+ with pytest.warns(DeprecationWarning):
+ with mock.patch.object(google.auth, 'default') as adc:
+ adc.return_value = (cred, None)
+ transport = transport_class(
+ host="squid.clam.whelk",
+ api_mtls_endpoint="mtls.squid.clam.whelk",
+ client_cert_source=client_cert_source_callback,
+ )
+ adc.assert_called_once()
+
+ grpc_ssl_channel_cred.assert_called_once_with(
+ certificate_chain=b"cert bytes", private_key=b"key bytes"
+ )
+ grpc_create_channel.assert_called_once_with(
+ "mtls.squid.clam.whelk:443",
+ credentials=cred,
+ credentials_file=None,
+ scopes=None,
+ ssl_credentials=mock_ssl_cred,
+ quota_project_id=None,
+ options=[
+ ("grpc.max_send_message_length", -1),
+ ("grpc.max_receive_message_length", -1),
+ ],
+ )
+ assert transport.grpc_channel == mock_grpc_channel
+ assert transport._ssl_channel_credentials == mock_ssl_cred
+
+
+# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are
+# removed from grpc/grpc_asyncio transport constructor.
+@pytest.mark.parametrize("transport_class", [transports.WebRiskServiceV1Beta1GrpcTransport, transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport])
+def test_web_risk_service_v1_beta1_transport_channel_mtls_with_adc(
+ transport_class
+):
+ mock_ssl_cred = mock.Mock()
+ with mock.patch.multiple(
+ "google.auth.transport.grpc.SslCredentials",
+ __init__=mock.Mock(return_value=None),
+ ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred),
+ ):
+ with mock.patch.object(transport_class, "create_channel") as grpc_create_channel:
+ mock_grpc_channel = mock.Mock()
+ grpc_create_channel.return_value = mock_grpc_channel
+ mock_cred = mock.Mock()
+
+ with pytest.warns(DeprecationWarning):
+ transport = transport_class(
+ host="squid.clam.whelk",
+ credentials=mock_cred,
+ api_mtls_endpoint="mtls.squid.clam.whelk",
+ client_cert_source=None,
+ )
+
+ grpc_create_channel.assert_called_once_with(
+ "mtls.squid.clam.whelk:443",
+ credentials=mock_cred,
+ credentials_file=None,
+ scopes=None,
+ ssl_credentials=mock_ssl_cred,
+ quota_project_id=None,
+ options=[
+ ("grpc.max_send_message_length", -1),
+ ("grpc.max_receive_message_length", -1),
+ ],
+ )
+ assert transport.grpc_channel == mock_grpc_channel
+
+
+def test_common_billing_account_path():
+ billing_account = "squid"
+ expected = "billingAccounts/{billing_account}".format(billing_account=billing_account, )
+ actual = WebRiskServiceV1Beta1Client.common_billing_account_path(billing_account)
+ assert expected == actual
+
+
+def test_parse_common_billing_account_path():
+ expected = {
+ "billing_account": "clam",
+ }
+ path = WebRiskServiceV1Beta1Client.common_billing_account_path(**expected)
+
+ # Check that the path construction is reversible.
+ actual = WebRiskServiceV1Beta1Client.parse_common_billing_account_path(path)
+ assert expected == actual
+
+def test_common_folder_path():
+ folder = "whelk"
+ expected = "folders/{folder}".format(folder=folder, )
+ actual = WebRiskServiceV1Beta1Client.common_folder_path(folder)
+ assert expected == actual
+
+
+def test_parse_common_folder_path():
+ expected = {
+ "folder": "octopus",
+ }
+ path = WebRiskServiceV1Beta1Client.common_folder_path(**expected)
+
+ # Check that the path construction is reversible.
+ actual = WebRiskServiceV1Beta1Client.parse_common_folder_path(path)
+ assert expected == actual
+
+def test_common_organization_path():
+ organization = "oyster"
+ expected = "organizations/{organization}".format(organization=organization, )
+ actual = WebRiskServiceV1Beta1Client.common_organization_path(organization)
+ assert expected == actual
+
+
+def test_parse_common_organization_path():
+ expected = {
+ "organization": "nudibranch",
+ }
+ path = WebRiskServiceV1Beta1Client.common_organization_path(**expected)
+
+ # Check that the path construction is reversible.
+ actual = WebRiskServiceV1Beta1Client.parse_common_organization_path(path)
+ assert expected == actual
+
+def test_common_project_path():
+ project = "cuttlefish"
+ expected = "projects/{project}".format(project=project, )
+ actual = WebRiskServiceV1Beta1Client.common_project_path(project)
+ assert expected == actual
+
+
+def test_parse_common_project_path():
+ expected = {
+ "project": "mussel",
+ }
+ path = WebRiskServiceV1Beta1Client.common_project_path(**expected)
+
+ # Check that the path construction is reversible.
+ actual = WebRiskServiceV1Beta1Client.parse_common_project_path(path)
+ assert expected == actual
+
+def test_common_location_path():
+ project = "winkle"
+ location = "nautilus"
+ expected = "projects/{project}/locations/{location}".format(project=project, location=location, )
+ actual = WebRiskServiceV1Beta1Client.common_location_path(project, location)
+ assert expected == actual
+
+
+def test_parse_common_location_path():
+ expected = {
+ "project": "scallop",
+ "location": "abalone",
+ }
+ path = WebRiskServiceV1Beta1Client.common_location_path(**expected)
+
+ # Check that the path construction is reversible.
+ actual = WebRiskServiceV1Beta1Client.parse_common_location_path(path)
+ assert expected == actual
+
+
+def test_client_withDEFAULT_CLIENT_INFO():
+ client_info = gapic_v1.client_info.ClientInfo()
+
+ with mock.patch.object(transports.WebRiskServiceV1Beta1Transport, '_prep_wrapped_messages') as prep:
+ client = WebRiskServiceV1Beta1Client(
+ credentials=ga_credentials.AnonymousCredentials(),
+ client_info=client_info,
+ )
+ prep.assert_called_once_with(client_info)
+
+ with mock.patch.object(transports.WebRiskServiceV1Beta1Transport, '_prep_wrapped_messages') as prep:
+ transport_class = WebRiskServiceV1Beta1Client.get_transport_class()
+ transport = transport_class(
+ credentials=ga_credentials.AnonymousCredentials(),
+ client_info=client_info,
+ )
+ prep.assert_called_once_with(client_info)
From d9f2b9725544fa6e6421e7d7318b85e886884638 Mon Sep 17 00:00:00 2001
From: "release-please[bot]"
<55107282+release-please[bot]@users.noreply.github.com>
Date: Mon, 12 Jul 2021 23:30:36 +0000
Subject: [PATCH 8/8] chore: release 1.4.0 (#97)
:robot: I have created a release \*beep\* \*boop\*
---
## [1.4.0](https://www.github.com/googleapis/python-webrisk/compare/v1.3.0...v1.4.0) (2021-07-01)
### Features
* add always_use_jwt_access ([#96](https://www.github.com/googleapis/python-webrisk/issues/96)) ([b0f0fd3](https://www.github.com/googleapis/python-webrisk/commit/b0f0fd3c7acd0bb4061956c3afd8e50d4d3c63a7))
### Bug Fixes
* disable always_use_jwt_access ([#100](https://www.github.com/googleapis/python-webrisk/issues/100)) ([8f2d77e](https://www.github.com/googleapis/python-webrisk/commit/8f2d77ec058ba0a9943f43edcf077835a6dbd47e))
### Documentation
* omit mention of Python 2.7 in 'CONTRIBUTING.rst' ([#1127](https://www.github.com/googleapis/python-webrisk/issues/1127)) ([#91](https://www.github.com/googleapis/python-webrisk/issues/91)) ([fe10bdc](https://www.github.com/googleapis/python-webrisk/commit/fe10bdc4e887621002230c175f3a93916b6d81ca)), closes [#1126](https://www.github.com/googleapis/python-webrisk/issues/1126)
---
This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
---
CHANGELOG.md | 17 +
.../web_risk_service/transports/base.py | 2 +-
.../web_risk_service/transports/grpc.py | 5 +-
.../transports/grpc_asyncio.py | 5 +-
.../transports/base.py | 2 +-
.../transports/grpc.py | 5 +-
.../transports/grpc_asyncio.py | 5 +-
owl-bot-staging/v1/.coveragerc | 17 -
owl-bot-staging/v1/MANIFEST.in | 2 -
owl-bot-staging/v1/README.rst | 49 -
owl-bot-staging/v1/docs/conf.py | 376 ----
owl-bot-staging/v1/docs/index.rst | 7 -
.../v1/docs/webrisk_v1/services.rst | 6 -
owl-bot-staging/v1/docs/webrisk_v1/types.rst | 7 -
.../v1/docs/webrisk_v1/web_risk_service.rst | 6 -
.../v1/google/cloud/webrisk/__init__.py | 53 -
.../v1/google/cloud/webrisk/py.typed | 2 -
.../v1/google/cloud/webrisk_v1/__init__.py | 54 -
.../cloud/webrisk_v1/gapic_metadata.json | 63 -
.../v1/google/cloud/webrisk_v1/py.typed | 2 -
.../cloud/webrisk_v1/services/__init__.py | 15 -
.../services/web_risk_service/__init__.py | 22 -
.../services/web_risk_service/async_client.py | 541 ------
.../services/web_risk_service/client.py | 698 -------
.../web_risk_service/transports/__init__.py | 33 -
.../web_risk_service/transports/base.py | 231 ---
.../web_risk_service/transports/grpc.py | 355 ----
.../transports/grpc_asyncio.py | 359 ----
.../google/cloud/webrisk_v1/types/__init__.py | 50 -
.../google/cloud/webrisk_v1/types/webrisk.py | 529 ------
owl-bot-staging/v1/mypy.ini | 3 -
owl-bot-staging/v1/noxfile.py | 132 --
.../v1/scripts/fixup_webrisk_v1_keywords.py | 179 --
owl-bot-staging/v1/setup.py | 53 -
owl-bot-staging/v1/tests/__init__.py | 16 -
owl-bot-staging/v1/tests/unit/__init__.py | 16 -
.../v1/tests/unit/gapic/__init__.py | 16 -
.../tests/unit/gapic/webrisk_v1/__init__.py | 16 -
.../gapic/webrisk_v1/test_web_risk_service.py | 1675 -----------------
owl-bot-staging/v1beta1/.coveragerc | 17 -
owl-bot-staging/v1beta1/MANIFEST.in | 2 -
owl-bot-staging/v1beta1/README.rst | 49 -
owl-bot-staging/v1beta1/docs/conf.py | 376 ----
owl-bot-staging/v1beta1/docs/index.rst | 7 -
.../v1beta1/docs/webrisk_v1beta1/services.rst | 6 -
.../v1beta1/docs/webrisk_v1beta1/types.rst | 7 -
.../web_risk_service_v1_beta1.rst | 6 -
.../v1beta1/google/cloud/webrisk/__init__.py | 49 -
.../v1beta1/google/cloud/webrisk/py.typed | 2 -
.../google/cloud/webrisk_v1beta1/__init__.py | 50 -
.../cloud/webrisk_v1beta1/gapic_metadata.json | 53 -
.../google/cloud/webrisk_v1beta1/py.typed | 2 -
.../webrisk_v1beta1/services/__init__.py | 15 -
.../web_risk_service_v1_beta1/__init__.py | 22 -
.../web_risk_service_v1_beta1/async_client.py | 426 -----
.../web_risk_service_v1_beta1/client.py | 583 ------
.../transports/__init__.py | 33 -
.../transports/base.py | 217 ---
.../transports/grpc.py | 311 ---
.../transports/grpc_asyncio.py | 315 ----
.../cloud/webrisk_v1beta1/types/__init__.py | 46 -
.../cloud/webrisk_v1beta1/types/webrisk.py | 478 -----
owl-bot-staging/v1beta1/mypy.ini | 3 -
owl-bot-staging/v1beta1/noxfile.py | 132 --
.../scripts/fixup_webrisk_v1beta1_keywords.py | 178 --
owl-bot-staging/v1beta1/setup.py | 53 -
owl-bot-staging/v1beta1/tests/__init__.py | 16 -
.../v1beta1/tests/unit/__init__.py | 16 -
.../v1beta1/tests/unit/gapic/__init__.py | 16 -
.../unit/gapic/webrisk_v1beta1/__init__.py | 16 -
.../test_web_risk_service_v1_beta1.py | 1437 --------------
setup.py | 2 +-
.../gapic/webrisk_v1/test_web_risk_service.py | 26 +-
.../test_web_risk_service_v1_beta1.py | 26 +-
74 files changed, 80 insertions(+), 10537 deletions(-)
delete mode 100644 owl-bot-staging/v1/.coveragerc
delete mode 100644 owl-bot-staging/v1/MANIFEST.in
delete mode 100644 owl-bot-staging/v1/README.rst
delete mode 100644 owl-bot-staging/v1/docs/conf.py
delete mode 100644 owl-bot-staging/v1/docs/index.rst
delete mode 100644 owl-bot-staging/v1/docs/webrisk_v1/services.rst
delete mode 100644 owl-bot-staging/v1/docs/webrisk_v1/types.rst
delete mode 100644 owl-bot-staging/v1/docs/webrisk_v1/web_risk_service.rst
delete mode 100644 owl-bot-staging/v1/google/cloud/webrisk/__init__.py
delete mode 100644 owl-bot-staging/v1/google/cloud/webrisk/py.typed
delete mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/__init__.py
delete mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/gapic_metadata.json
delete mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/py.typed
delete mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/services/__init__.py
delete mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/__init__.py
delete mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/async_client.py
delete mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/client.py
delete mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/__init__.py
delete mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/base.py
delete mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc.py
delete mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc_asyncio.py
delete mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/types/__init__.py
delete mode 100644 owl-bot-staging/v1/google/cloud/webrisk_v1/types/webrisk.py
delete mode 100644 owl-bot-staging/v1/mypy.ini
delete mode 100644 owl-bot-staging/v1/noxfile.py
delete mode 100644 owl-bot-staging/v1/scripts/fixup_webrisk_v1_keywords.py
delete mode 100644 owl-bot-staging/v1/setup.py
delete mode 100644 owl-bot-staging/v1/tests/__init__.py
delete mode 100644 owl-bot-staging/v1/tests/unit/__init__.py
delete mode 100644 owl-bot-staging/v1/tests/unit/gapic/__init__.py
delete mode 100644 owl-bot-staging/v1/tests/unit/gapic/webrisk_v1/__init__.py
delete mode 100644 owl-bot-staging/v1/tests/unit/gapic/webrisk_v1/test_web_risk_service.py
delete mode 100644 owl-bot-staging/v1beta1/.coveragerc
delete mode 100644 owl-bot-staging/v1beta1/MANIFEST.in
delete mode 100644 owl-bot-staging/v1beta1/README.rst
delete mode 100644 owl-bot-staging/v1beta1/docs/conf.py
delete mode 100644 owl-bot-staging/v1beta1/docs/index.rst
delete mode 100644 owl-bot-staging/v1beta1/docs/webrisk_v1beta1/services.rst
delete mode 100644 owl-bot-staging/v1beta1/docs/webrisk_v1beta1/types.rst
delete mode 100644 owl-bot-staging/v1beta1/docs/webrisk_v1beta1/web_risk_service_v1_beta1.rst
delete mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk/__init__.py
delete mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk/py.typed
delete mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/__init__.py
delete mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/gapic_metadata.json
delete mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/py.typed
delete mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/__init__.py
delete mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/__init__.py
delete mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/async_client.py
delete mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/client.py
delete mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/__init__.py
delete mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/base.py
delete mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc.py
delete mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc_asyncio.py
delete mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/types/__init__.py
delete mode 100644 owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/types/webrisk.py
delete mode 100644 owl-bot-staging/v1beta1/mypy.ini
delete mode 100644 owl-bot-staging/v1beta1/noxfile.py
delete mode 100644 owl-bot-staging/v1beta1/scripts/fixup_webrisk_v1beta1_keywords.py
delete mode 100644 owl-bot-staging/v1beta1/setup.py
delete mode 100644 owl-bot-staging/v1beta1/tests/__init__.py
delete mode 100644 owl-bot-staging/v1beta1/tests/unit/__init__.py
delete mode 100644 owl-bot-staging/v1beta1/tests/unit/gapic/__init__.py
delete mode 100644 owl-bot-staging/v1beta1/tests/unit/gapic/webrisk_v1beta1/__init__.py
delete mode 100644 owl-bot-staging/v1beta1/tests/unit/gapic/webrisk_v1beta1/test_web_risk_service_v1_beta1.py
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 34d39fa..8940ae7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,23 @@
[PyPI History][1]
[1]: https://pypi.org/project/google-cloud-webrisk/#history
+## [1.4.0](https://www.github.com/googleapis/python-webrisk/compare/v1.3.0...v1.4.0) (2021-07-01)
+
+
+### Features
+
+* add always_use_jwt_access ([#96](https://www.github.com/googleapis/python-webrisk/issues/96)) ([b0f0fd3](https://www.github.com/googleapis/python-webrisk/commit/b0f0fd3c7acd0bb4061956c3afd8e50d4d3c63a7))
+
+
+### Bug Fixes
+
+* disable always_use_jwt_access ([#100](https://www.github.com/googleapis/python-webrisk/issues/100)) ([8f2d77e](https://www.github.com/googleapis/python-webrisk/commit/8f2d77ec058ba0a9943f43edcf077835a6dbd47e))
+
+
+### Documentation
+
+* omit mention of Python 2.7 in 'CONTRIBUTING.rst' ([#1127](https://www.github.com/googleapis/python-webrisk/issues/1127)) ([#91](https://www.github.com/googleapis/python-webrisk/issues/91)) ([fe10bdc](https://www.github.com/googleapis/python-webrisk/commit/fe10bdc4e887621002230c175f3a93916b6d81ca)), closes [#1126](https://www.github.com/googleapis/python-webrisk/issues/1126)
+
## [1.3.0](https://www.github.com/googleapis/python-webrisk/compare/v1.2.0...v1.3.0) (2021-06-01)
diff --git a/google/cloud/webrisk_v1/services/web_risk_service/transports/base.py b/google/cloud/webrisk_v1/services/web_risk_service/transports/base.py
index 41be5a5..8d74b17 100644
--- a/google/cloud/webrisk_v1/services/web_risk_service/transports/base.py
+++ b/google/cloud/webrisk_v1/services/web_risk_service/transports/base.py
@@ -96,7 +96,7 @@ def __init__(
scopes_kwargs = self._get_scopes_kwargs(self._host, scopes)
# Save the scopes.
- self._scopes = scopes or self.AUTH_SCOPES
+ self._scopes = scopes
# If no credentials are provided, then determine the appropriate
# defaults.
diff --git a/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc.py b/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc.py
index f89a4f9..50f4130 100644
--- a/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc.py
+++ b/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc.py
@@ -58,6 +58,7 @@ def __init__(
client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None,
quota_project_id: Optional[str] = None,
client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
+ always_use_jwt_access: Optional[bool] = False,
) -> None:
"""Instantiate the transport.
@@ -98,6 +99,8 @@ def __init__(
API requests. If ``None``, then default info will be used.
Generally, you only need to set this if you're developing
your own client library.
+ always_use_jwt_access (Optional[bool]): Whether self signed JWT should
+ be used for service account credentials.
Raises:
google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport
@@ -150,7 +153,7 @@ def __init__(
scopes=scopes,
quota_project_id=quota_project_id,
client_info=client_info,
- always_use_jwt_access=True,
+ always_use_jwt_access=always_use_jwt_access,
)
if not self._grpc_channel:
diff --git a/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc_asyncio.py b/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc_asyncio.py
index 4537697..a0667ff 100644
--- a/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc_asyncio.py
+++ b/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc_asyncio.py
@@ -104,6 +104,7 @@ def __init__(
client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None,
quota_project_id=None,
client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
+ always_use_jwt_access: Optional[bool] = False,
) -> None:
"""Instantiate the transport.
@@ -145,6 +146,8 @@ def __init__(
API requests. If ``None``, then default info will be used.
Generally, you only need to set this if you're developing
your own client library.
+ always_use_jwt_access (Optional[bool]): Whether self signed JWT should
+ be used for service account credentials.
Raises:
google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport
@@ -196,7 +199,7 @@ def __init__(
scopes=scopes,
quota_project_id=quota_project_id,
client_info=client_info,
- always_use_jwt_access=True,
+ always_use_jwt_access=always_use_jwt_access,
)
if not self._grpc_channel:
diff --git a/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/base.py b/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/base.py
index 714a156..b2ff921 100644
--- a/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/base.py
+++ b/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/base.py
@@ -96,7 +96,7 @@ def __init__(
scopes_kwargs = self._get_scopes_kwargs(self._host, scopes)
# Save the scopes.
- self._scopes = scopes or self.AUTH_SCOPES
+ self._scopes = scopes
# If no credentials are provided, then determine the appropriate
# defaults.
diff --git a/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc.py b/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc.py
index fd2627a..d67a077 100644
--- a/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc.py
+++ b/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc.py
@@ -58,6 +58,7 @@ def __init__(
client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None,
quota_project_id: Optional[str] = None,
client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
+ always_use_jwt_access: Optional[bool] = False,
) -> None:
"""Instantiate the transport.
@@ -98,6 +99,8 @@ def __init__(
API requests. If ``None``, then default info will be used.
Generally, you only need to set this if you're developing
your own client library.
+ always_use_jwt_access (Optional[bool]): Whether self signed JWT should
+ be used for service account credentials.
Raises:
google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport
@@ -150,7 +153,7 @@ def __init__(
scopes=scopes,
quota_project_id=quota_project_id,
client_info=client_info,
- always_use_jwt_access=True,
+ always_use_jwt_access=always_use_jwt_access,
)
if not self._grpc_channel:
diff --git a/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc_asyncio.py b/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc_asyncio.py
index 074bfec..24547ff 100644
--- a/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc_asyncio.py
+++ b/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc_asyncio.py
@@ -104,6 +104,7 @@ def __init__(
client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None,
quota_project_id=None,
client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
+ always_use_jwt_access: Optional[bool] = False,
) -> None:
"""Instantiate the transport.
@@ -145,6 +146,8 @@ def __init__(
API requests. If ``None``, then default info will be used.
Generally, you only need to set this if you're developing
your own client library.
+ always_use_jwt_access (Optional[bool]): Whether self signed JWT should
+ be used for service account credentials.
Raises:
google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport
@@ -196,7 +199,7 @@ def __init__(
scopes=scopes,
quota_project_id=quota_project_id,
client_info=client_info,
- always_use_jwt_access=True,
+ always_use_jwt_access=always_use_jwt_access,
)
if not self._grpc_channel:
diff --git a/owl-bot-staging/v1/.coveragerc b/owl-bot-staging/v1/.coveragerc
deleted file mode 100644
index 5b506b5..0000000
--- a/owl-bot-staging/v1/.coveragerc
+++ /dev/null
@@ -1,17 +0,0 @@
-[run]
-branch = True
-
-[report]
-show_missing = True
-omit =
- google/cloud/webrisk/__init__.py
-exclude_lines =
- # Re-enable the standard pragma
- pragma: NO COVER
- # Ignore debug-only repr
- def __repr__
- # Ignore pkg_resources exceptions.
- # This is added at the module level as a safeguard for if someone
- # generates the code and tries to run it without pip installing. This
- # makes it virtually impossible to test properly.
- except pkg_resources.DistributionNotFound
diff --git a/owl-bot-staging/v1/MANIFEST.in b/owl-bot-staging/v1/MANIFEST.in
deleted file mode 100644
index 15cbc35..0000000
--- a/owl-bot-staging/v1/MANIFEST.in
+++ /dev/null
@@ -1,2 +0,0 @@
-recursive-include google/cloud/webrisk *.py
-recursive-include google/cloud/webrisk_v1 *.py
diff --git a/owl-bot-staging/v1/README.rst b/owl-bot-staging/v1/README.rst
deleted file mode 100644
index 47325bb..0000000
--- a/owl-bot-staging/v1/README.rst
+++ /dev/null
@@ -1,49 +0,0 @@
-Python Client for Google Cloud Webrisk API
-=================================================
-
-Quick Start
------------
-
-In order to use this library, you first need to go through the following steps:
-
-1. `Select or create a Cloud Platform project.`_
-2. `Enable billing for your project.`_
-3. Enable the Google Cloud Webrisk API.
-4. `Setup Authentication.`_
-
-.. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project
-.. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project
-.. _Setup Authentication.: https://googleapis.dev/python/google-api-core/latest/auth.html
-
-Installation
-~~~~~~~~~~~~
-
-Install this library in a `virtualenv`_ using pip. `virtualenv`_ is a tool to
-create isolated Python environments. The basic problem it addresses is one of
-dependencies and versions, and indirectly permissions.
-
-With `virtualenv`_, it's possible to install this library without needing system
-install permissions, and without clashing with the installed system
-dependencies.
-
-.. _`virtualenv`: https://virtualenv.pypa.io/en/latest/
-
-
-Mac/Linux
-^^^^^^^^^
-
-.. code-block:: console
-
- python3 -m venv
- source /bin/activate
- /bin/pip install /path/to/library
-
-
-Windows
-^^^^^^^
-
-.. code-block:: console
-
- python3 -m venv
- \Scripts\activate
- \Scripts\pip.exe install \path\to\library
diff --git a/owl-bot-staging/v1/docs/conf.py b/owl-bot-staging/v1/docs/conf.py
deleted file mode 100644
index ed09c72..0000000
--- a/owl-bot-staging/v1/docs/conf.py
+++ /dev/null
@@ -1,376 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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.
-#
-#
-# google-cloud-webrisk documentation build configuration file
-#
-# This file is execfile()d with the current directory set to its
-# containing dir.
-#
-# Note that not all possible configuration values are present in this
-# autogenerated file.
-#
-# All configuration values have a default; values that are commented out
-# serve to show the default.
-
-import sys
-import os
-import shlex
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-sys.path.insert(0, os.path.abspath(".."))
-
-__version__ = "0.1.0"
-
-# -- General configuration ------------------------------------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-needs_sphinx = "1.6.3"
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
-# ones.
-extensions = [
- "sphinx.ext.autodoc",
- "sphinx.ext.autosummary",
- "sphinx.ext.intersphinx",
- "sphinx.ext.coverage",
- "sphinx.ext.napoleon",
- "sphinx.ext.todo",
- "sphinx.ext.viewcode",
-]
-
-# autodoc/autosummary flags
-autoclass_content = "both"
-autodoc_default_flags = ["members"]
-autosummary_generate = True
-
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ["_templates"]
-
-# Allow markdown includes (so releases.md can include CHANGLEOG.md)
-# http://www.sphinx-doc.org/en/master/markdown.html
-source_parsers = {".md": "recommonmark.parser.CommonMarkParser"}
-
-# The suffix(es) of source filenames.
-# You can specify multiple suffix as a list of string:
-source_suffix = [".rst", ".md"]
-
-# The encoding of source files.
-# source_encoding = 'utf-8-sig'
-
-# The master toctree document.
-master_doc = "index"
-
-# General information about the project.
-project = u"google-cloud-webrisk"
-copyright = u"2020, Google, LLC"
-author = u"Google APIs" # TODO: autogenerate this bit
-
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-# The full version, including alpha/beta/rc tags.
-release = __version__
-# The short X.Y version.
-version = ".".join(release.split(".")[0:2])
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#
-# This is also used if you do content translation via gettext catalogs.
-# Usually you set "language" from the command line for these cases.
-language = None
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-# today = ''
-# Else, today_fmt is used as the format for a strftime call.
-# today_fmt = '%B %d, %Y'
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-exclude_patterns = ["_build"]
-
-# The reST default role (used for this markup: `text`) to use for all
-# documents.
-# default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-# add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-# add_module_names = True
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-# show_authors = False
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = "sphinx"
-
-# A list of ignored prefixes for module index sorting.
-# modindex_common_prefix = []
-
-# If true, keep warnings as "system message" paragraphs in the built documents.
-# keep_warnings = False
-
-# If true, `todo` and `todoList` produce output, else they produce nothing.
-todo_include_todos = True
-
-
-# -- Options for HTML output ----------------------------------------------
-
-# The theme to use for HTML and HTML Help pages. See the documentation for
-# a list of builtin themes.
-html_theme = "alabaster"
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further. For a list of options available for each theme, see the
-# documentation.
-html_theme_options = {
- "description": "Google Cloud Client Libraries for Python",
- "github_user": "googleapis",
- "github_repo": "google-cloud-python",
- "github_banner": True,
- "font_family": "'Roboto', Georgia, sans",
- "head_font_family": "'Roboto', Georgia, serif",
- "code_font_family": "'Roboto Mono', 'Consolas', monospace",
-}
-
-# Add any paths that contain custom themes here, relative to this directory.
-# html_theme_path = []
-
-# The name for this set of Sphinx documents. If None, it defaults to
-# " v documentation".
-# html_title = None
-
-# A shorter title for the navigation bar. Default is the same as html_title.
-# html_short_title = None
-
-# The name of an image file (relative to this directory) to place at the top
-# of the sidebar.
-# html_logo = None
-
-# The name of an image file (within the static path) to use as favicon of the
-# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-# html_favicon = None
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ["_static"]
-
-# Add any extra paths that contain custom files (such as robots.txt or
-# .htaccess) here, relative to this directory. These files are copied
-# directly to the root of the documentation.
-# html_extra_path = []
-
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-# html_last_updated_fmt = '%b %d, %Y'
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-# html_use_smartypants = True
-
-# Custom sidebar templates, maps document names to template names.
-# html_sidebars = {}
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-# html_additional_pages = {}
-
-# If false, no module index is generated.
-# html_domain_indices = True
-
-# If false, no index is generated.
-# html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-# html_split_index = False
-
-# If true, links to the reST sources are added to the pages.
-# html_show_sourcelink = True
-
-# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-# html_show_sphinx = True
-
-# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-# html_show_copyright = True
-
-# If true, an OpenSearch description file will be output, and all pages will
-# contain a tag referring to it. The value of this option must be the
-# base URL from which the finished HTML is served.
-# html_use_opensearch = ''
-
-# This is the file name suffix for HTML files (e.g. ".xhtml").
-# html_file_suffix = None
-
-# Language to be used for generating the HTML full-text search index.
-# Sphinx supports the following languages:
-# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
-# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
-# html_search_language = 'en'
-
-# A dictionary with options for the search language support, empty by default.
-# Now only 'ja' uses this config value
-# html_search_options = {'type': 'default'}
-
-# The name of a javascript file (relative to the configuration directory) that
-# implements a search results scorer. If empty, the default will be used.
-# html_search_scorer = 'scorer.js'
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = "google-cloud-webrisk-doc"
-
-# -- Options for warnings ------------------------------------------------------
-
-
-suppress_warnings = [
- # Temporarily suppress this to avoid "more than one target found for
- # cross-reference" warning, which are intractable for us to avoid while in
- # a mono-repo.
- # See https://github.com/sphinx-doc/sphinx/blob
- # /2a65ffeef5c107c19084fabdd706cdff3f52d93c/sphinx/domains/python.py#L843
- "ref.python"
-]
-
-# -- Options for LaTeX output ---------------------------------------------
-
-latex_elements = {
- # The paper size ('letterpaper' or 'a4paper').
- # 'papersize': 'letterpaper',
- # The font size ('10pt', '11pt' or '12pt').
- # 'pointsize': '10pt',
- # Additional stuff for the LaTeX preamble.
- # 'preamble': '',
- # Latex figure (float) alignment
- # 'figure_align': 'htbp',
-}
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title,
-# author, documentclass [howto, manual, or own class]).
-latex_documents = [
- (
- master_doc,
- "google-cloud-webrisk.tex",
- u"google-cloud-webrisk Documentation",
- author,
- "manual",
- )
-]
-
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-# latex_logo = None
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-# latex_use_parts = False
-
-# If true, show page references after internal links.
-# latex_show_pagerefs = False
-
-# If true, show URL addresses after external links.
-# latex_show_urls = False
-
-# Documents to append as an appendix to all manuals.
-# latex_appendices = []
-
-# If false, no module index is generated.
-# latex_domain_indices = True
-
-
-# -- Options for manual page output ---------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [
- (
- master_doc,
- "google-cloud-webrisk",
- u"Google Cloud Webrisk Documentation",
- [author],
- 1,
- )
-]
-
-# If true, show URL addresses after external links.
-# man_show_urls = False
-
-
-# -- Options for Texinfo output -------------------------------------------
-
-# Grouping the document tree into Texinfo files. List of tuples
-# (source start file, target name, title, author,
-# dir menu entry, description, category)
-texinfo_documents = [
- (
- master_doc,
- "google-cloud-webrisk",
- u"google-cloud-webrisk Documentation",
- author,
- "google-cloud-webrisk",
- "GAPIC library for Google Cloud Webrisk API",
- "APIs",
- )
-]
-
-# Documents to append as an appendix to all manuals.
-# texinfo_appendices = []
-
-# If false, no module index is generated.
-# texinfo_domain_indices = True
-
-# How to display URL addresses: 'footnote', 'no', or 'inline'.
-# texinfo_show_urls = 'footnote'
-
-# If true, do not generate a @detailmenu in the "Top" node's menu.
-# texinfo_no_detailmenu = False
-
-
-# Example configuration for intersphinx: refer to the Python standard library.
-intersphinx_mapping = {
- "python": ("http://python.readthedocs.org/en/latest/", None),
- "gax": ("https://gax-python.readthedocs.org/en/latest/", None),
- "google-auth": ("https://google-auth.readthedocs.io/en/stable", None),
- "google-gax": ("https://gax-python.readthedocs.io/en/latest/", None),
- "google.api_core": ("https://googleapis.dev/python/google-api-core/latest/", None),
- "grpc": ("https://grpc.io/grpc/python/", None),
- "requests": ("http://requests.kennethreitz.org/en/stable/", None),
- "proto": ("https://proto-plus-python.readthedocs.io/en/stable", None),
- "protobuf": ("https://googleapis.dev/python/protobuf/latest/", None),
-}
-
-
-# Napoleon settings
-napoleon_google_docstring = True
-napoleon_numpy_docstring = True
-napoleon_include_private_with_doc = False
-napoleon_include_special_with_doc = True
-napoleon_use_admonition_for_examples = False
-napoleon_use_admonition_for_notes = False
-napoleon_use_admonition_for_references = False
-napoleon_use_ivar = False
-napoleon_use_param = True
-napoleon_use_rtype = True
diff --git a/owl-bot-staging/v1/docs/index.rst b/owl-bot-staging/v1/docs/index.rst
deleted file mode 100644
index 6d510e6..0000000
--- a/owl-bot-staging/v1/docs/index.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-API Reference
--------------
-.. toctree::
- :maxdepth: 2
-
- webrisk_v1/services
- webrisk_v1/types
diff --git a/owl-bot-staging/v1/docs/webrisk_v1/services.rst b/owl-bot-staging/v1/docs/webrisk_v1/services.rst
deleted file mode 100644
index 8b02d33..0000000
--- a/owl-bot-staging/v1/docs/webrisk_v1/services.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-Services for Google Cloud Webrisk v1 API
-========================================
-.. toctree::
- :maxdepth: 2
-
- web_risk_service
diff --git a/owl-bot-staging/v1/docs/webrisk_v1/types.rst b/owl-bot-staging/v1/docs/webrisk_v1/types.rst
deleted file mode 100644
index 8d742a7..0000000
--- a/owl-bot-staging/v1/docs/webrisk_v1/types.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Types for Google Cloud Webrisk v1 API
-=====================================
-
-.. automodule:: google.cloud.webrisk_v1.types
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/owl-bot-staging/v1/docs/webrisk_v1/web_risk_service.rst b/owl-bot-staging/v1/docs/webrisk_v1/web_risk_service.rst
deleted file mode 100644
index e67920a..0000000
--- a/owl-bot-staging/v1/docs/webrisk_v1/web_risk_service.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-WebRiskService
---------------------------------
-
-.. automodule:: google.cloud.webrisk_v1.services.web_risk_service
- :members:
- :inherited-members:
diff --git a/owl-bot-staging/v1/google/cloud/webrisk/__init__.py b/owl-bot-staging/v1/google/cloud/webrisk/__init__.py
deleted file mode 100644
index 03b698a..0000000
--- a/owl-bot-staging/v1/google/cloud/webrisk/__init__.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-from google.cloud.webrisk_v1.services.web_risk_service.client import WebRiskServiceClient
-from google.cloud.webrisk_v1.services.web_risk_service.async_client import WebRiskServiceAsyncClient
-
-from google.cloud.webrisk_v1.types.webrisk import ComputeThreatListDiffRequest
-from google.cloud.webrisk_v1.types.webrisk import ComputeThreatListDiffResponse
-from google.cloud.webrisk_v1.types.webrisk import CreateSubmissionRequest
-from google.cloud.webrisk_v1.types.webrisk import RawHashes
-from google.cloud.webrisk_v1.types.webrisk import RawIndices
-from google.cloud.webrisk_v1.types.webrisk import RiceDeltaEncoding
-from google.cloud.webrisk_v1.types.webrisk import SearchHashesRequest
-from google.cloud.webrisk_v1.types.webrisk import SearchHashesResponse
-from google.cloud.webrisk_v1.types.webrisk import SearchUrisRequest
-from google.cloud.webrisk_v1.types.webrisk import SearchUrisResponse
-from google.cloud.webrisk_v1.types.webrisk import Submission
-from google.cloud.webrisk_v1.types.webrisk import ThreatEntryAdditions
-from google.cloud.webrisk_v1.types.webrisk import ThreatEntryRemovals
-from google.cloud.webrisk_v1.types.webrisk import CompressionType
-from google.cloud.webrisk_v1.types.webrisk import ThreatType
-
-__all__ = ('WebRiskServiceClient',
- 'WebRiskServiceAsyncClient',
- 'ComputeThreatListDiffRequest',
- 'ComputeThreatListDiffResponse',
- 'CreateSubmissionRequest',
- 'RawHashes',
- 'RawIndices',
- 'RiceDeltaEncoding',
- 'SearchHashesRequest',
- 'SearchHashesResponse',
- 'SearchUrisRequest',
- 'SearchUrisResponse',
- 'Submission',
- 'ThreatEntryAdditions',
- 'ThreatEntryRemovals',
- 'CompressionType',
- 'ThreatType',
-)
diff --git a/owl-bot-staging/v1/google/cloud/webrisk/py.typed b/owl-bot-staging/v1/google/cloud/webrisk/py.typed
deleted file mode 100644
index bef3da1..0000000
--- a/owl-bot-staging/v1/google/cloud/webrisk/py.typed
+++ /dev/null
@@ -1,2 +0,0 @@
-# Marker file for PEP 561.
-# The google-cloud-webrisk package uses inline types.
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/__init__.py b/owl-bot-staging/v1/google/cloud/webrisk_v1/__init__.py
deleted file mode 100644
index 0031bab..0000000
--- a/owl-bot-staging/v1/google/cloud/webrisk_v1/__init__.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-from .services.web_risk_service import WebRiskServiceClient
-from .services.web_risk_service import WebRiskServiceAsyncClient
-
-from .types.webrisk import ComputeThreatListDiffRequest
-from .types.webrisk import ComputeThreatListDiffResponse
-from .types.webrisk import CreateSubmissionRequest
-from .types.webrisk import RawHashes
-from .types.webrisk import RawIndices
-from .types.webrisk import RiceDeltaEncoding
-from .types.webrisk import SearchHashesRequest
-from .types.webrisk import SearchHashesResponse
-from .types.webrisk import SearchUrisRequest
-from .types.webrisk import SearchUrisResponse
-from .types.webrisk import Submission
-from .types.webrisk import ThreatEntryAdditions
-from .types.webrisk import ThreatEntryRemovals
-from .types.webrisk import CompressionType
-from .types.webrisk import ThreatType
-
-__all__ = (
- 'WebRiskServiceAsyncClient',
-'CompressionType',
-'ComputeThreatListDiffRequest',
-'ComputeThreatListDiffResponse',
-'CreateSubmissionRequest',
-'RawHashes',
-'RawIndices',
-'RiceDeltaEncoding',
-'SearchHashesRequest',
-'SearchHashesResponse',
-'SearchUrisRequest',
-'SearchUrisResponse',
-'Submission',
-'ThreatEntryAdditions',
-'ThreatEntryRemovals',
-'ThreatType',
-'WebRiskServiceClient',
-)
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/gapic_metadata.json b/owl-bot-staging/v1/google/cloud/webrisk_v1/gapic_metadata.json
deleted file mode 100644
index fc56236..0000000
--- a/owl-bot-staging/v1/google/cloud/webrisk_v1/gapic_metadata.json
+++ /dev/null
@@ -1,63 +0,0 @@
- {
- "comment": "This file maps proto services/RPCs to the corresponding library clients/methods",
- "language": "python",
- "libraryPackage": "google.cloud.webrisk_v1",
- "protoPackage": "google.cloud.webrisk.v1",
- "schema": "1.0",
- "services": {
- "WebRiskService": {
- "clients": {
- "grpc": {
- "libraryClient": "WebRiskServiceClient",
- "rpcs": {
- "ComputeThreatListDiff": {
- "methods": [
- "compute_threat_list_diff"
- ]
- },
- "CreateSubmission": {
- "methods": [
- "create_submission"
- ]
- },
- "SearchHashes": {
- "methods": [
- "search_hashes"
- ]
- },
- "SearchUris": {
- "methods": [
- "search_uris"
- ]
- }
- }
- },
- "grpc-async": {
- "libraryClient": "WebRiskServiceAsyncClient",
- "rpcs": {
- "ComputeThreatListDiff": {
- "methods": [
- "compute_threat_list_diff"
- ]
- },
- "CreateSubmission": {
- "methods": [
- "create_submission"
- ]
- },
- "SearchHashes": {
- "methods": [
- "search_hashes"
- ]
- },
- "SearchUris": {
- "methods": [
- "search_uris"
- ]
- }
- }
- }
- }
- }
- }
-}
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/py.typed b/owl-bot-staging/v1/google/cloud/webrisk_v1/py.typed
deleted file mode 100644
index bef3da1..0000000
--- a/owl-bot-staging/v1/google/cloud/webrisk_v1/py.typed
+++ /dev/null
@@ -1,2 +0,0 @@
-# Marker file for PEP 561.
-# The google-cloud-webrisk package uses inline types.
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/services/__init__.py b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/__init__.py
deleted file mode 100644
index 4de6597..0000000
--- a/owl-bot-staging/v1/google/cloud/webrisk_v1/services/__init__.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/__init__.py b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/__init__.py
deleted file mode 100644
index 58b3140..0000000
--- a/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/__init__.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-from .client import WebRiskServiceClient
-from .async_client import WebRiskServiceAsyncClient
-
-__all__ = (
- 'WebRiskServiceClient',
- 'WebRiskServiceAsyncClient',
-)
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/async_client.py b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/async_client.py
deleted file mode 100644
index 91cd3ee..0000000
--- a/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/async_client.py
+++ /dev/null
@@ -1,541 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-from collections import OrderedDict
-import functools
-import re
-from typing import Dict, Sequence, Tuple, Type, Union
-import pkg_resources
-
-import google.api_core.client_options as ClientOptions # type: ignore
-from google.api_core import exceptions as core_exceptions # type: ignore
-from google.api_core import gapic_v1 # type: ignore
-from google.api_core import retry as retries # type: ignore
-from google.auth import credentials as ga_credentials # type: ignore
-from google.oauth2 import service_account # type: ignore
-
-from google.cloud.webrisk_v1.types import webrisk
-from google.protobuf import timestamp_pb2 # type: ignore
-from .transports.base import WebRiskServiceTransport, DEFAULT_CLIENT_INFO
-from .transports.grpc_asyncio import WebRiskServiceGrpcAsyncIOTransport
-from .client import WebRiskServiceClient
-
-
-class WebRiskServiceAsyncClient:
- """Web Risk API defines an interface to detect malicious URLs on
- your website and in client applications.
- """
-
- _client: WebRiskServiceClient
-
- DEFAULT_ENDPOINT = WebRiskServiceClient.DEFAULT_ENDPOINT
- DEFAULT_MTLS_ENDPOINT = WebRiskServiceClient.DEFAULT_MTLS_ENDPOINT
-
- common_billing_account_path = staticmethod(WebRiskServiceClient.common_billing_account_path)
- parse_common_billing_account_path = staticmethod(WebRiskServiceClient.parse_common_billing_account_path)
- common_folder_path = staticmethod(WebRiskServiceClient.common_folder_path)
- parse_common_folder_path = staticmethod(WebRiskServiceClient.parse_common_folder_path)
- common_organization_path = staticmethod(WebRiskServiceClient.common_organization_path)
- parse_common_organization_path = staticmethod(WebRiskServiceClient.parse_common_organization_path)
- common_project_path = staticmethod(WebRiskServiceClient.common_project_path)
- parse_common_project_path = staticmethod(WebRiskServiceClient.parse_common_project_path)
- common_location_path = staticmethod(WebRiskServiceClient.common_location_path)
- parse_common_location_path = staticmethod(WebRiskServiceClient.parse_common_location_path)
-
- @classmethod
- def from_service_account_info(cls, info: dict, *args, **kwargs):
- """Creates an instance of this client using the provided credentials
- info.
-
- Args:
- info (dict): The service account private key info.
- args: Additional arguments to pass to the constructor.
- kwargs: Additional arguments to pass to the constructor.
-
- Returns:
- WebRiskServiceAsyncClient: The constructed client.
- """
- return WebRiskServiceClient.from_service_account_info.__func__(WebRiskServiceAsyncClient, info, *args, **kwargs) # type: ignore
-
- @classmethod
- def from_service_account_file(cls, filename: str, *args, **kwargs):
- """Creates an instance of this client using the provided credentials
- file.
-
- Args:
- filename (str): The path to the service account private key json
- file.
- args: Additional arguments to pass to the constructor.
- kwargs: Additional arguments to pass to the constructor.
-
- Returns:
- WebRiskServiceAsyncClient: The constructed client.
- """
- return WebRiskServiceClient.from_service_account_file.__func__(WebRiskServiceAsyncClient, filename, *args, **kwargs) # type: ignore
-
- from_service_account_json = from_service_account_file
-
- @property
- def transport(self) -> WebRiskServiceTransport:
- """Returns the transport used by the client instance.
-
- Returns:
- WebRiskServiceTransport: The transport used by the client instance.
- """
- return self._client.transport
-
- get_transport_class = functools.partial(type(WebRiskServiceClient).get_transport_class, type(WebRiskServiceClient))
-
- def __init__(self, *,
- credentials: ga_credentials.Credentials = None,
- transport: Union[str, WebRiskServiceTransport] = "grpc_asyncio",
- client_options: ClientOptions = None,
- client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
- ) -> None:
- """Instantiates the web risk service client.
-
- Args:
- credentials (Optional[google.auth.credentials.Credentials]): The
- authorization credentials to attach to requests. These
- credentials identify the application to the service; if none
- are specified, the client will attempt to ascertain the
- credentials from the environment.
- transport (Union[str, ~.WebRiskServiceTransport]): The
- transport to use. If set to None, a transport is chosen
- automatically.
- client_options (ClientOptions): Custom options for the client. It
- won't take effect if a ``transport`` instance is provided.
- (1) The ``api_endpoint`` property can be used to override the
- default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT
- environment variable can also be used to override the endpoint:
- "always" (always use the default mTLS endpoint), "never" (always
- use the default regular endpoint) and "auto" (auto switch to the
- default mTLS endpoint if client certificate is present, this is
- the default value). However, the ``api_endpoint`` property takes
- precedence if provided.
- (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable
- is "true", then the ``client_cert_source`` property can be used
- to provide client certificate for mutual TLS transport. If
- not provided, the default SSL client certificate will be used if
- present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not
- set, no client certificate will be used.
-
- Raises:
- google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport
- creation failed for any reason.
- """
- self._client = WebRiskServiceClient(
- credentials=credentials,
- transport=transport,
- client_options=client_options,
- client_info=client_info,
-
- )
-
- async def compute_threat_list_diff(self,
- request: webrisk.ComputeThreatListDiffRequest = None,
- *,
- threat_type: webrisk.ThreatType = None,
- version_token: bytes = None,
- constraints: webrisk.ComputeThreatListDiffRequest.Constraints = None,
- retry: retries.Retry = gapic_v1.method.DEFAULT,
- timeout: float = None,
- metadata: Sequence[Tuple[str, str]] = (),
- ) -> webrisk.ComputeThreatListDiffResponse:
- r"""Gets the most recent threat list diffs. These diffs
- should be applied to a local database of hashes to keep
- it up-to-date. If the local database is empty or
- excessively out-of-date, a complete snapshot of the
- database will be returned. This Method only updates a
- single ThreatList at a time. To update multiple
- ThreatList databases, this method needs to be called
- once for each list.
-
- Args:
- request (:class:`google.cloud.webrisk_v1.types.ComputeThreatListDiffRequest`):
- The request object. Describes an API diff request.
- threat_type (:class:`google.cloud.webrisk_v1.types.ThreatType`):
- Required. The threat list to update.
- Only a single ThreatType should be
- specified.
-
- This corresponds to the ``threat_type`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- version_token (:class:`bytes`):
- The current version token of the
- client for the requested list (the
- client version that was received from
- the last successful diff). If the client
- does not have a version token (this is
- the first time calling
- ComputeThreatListDiff), this may be left
- empty and a full database snapshot will
- be returned.
-
- This corresponds to the ``version_token`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- constraints (:class:`google.cloud.webrisk_v1.types.ComputeThreatListDiffRequest.Constraints`):
- Required. The constraints associated
- with this request.
-
- This corresponds to the ``constraints`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
- should be retried.
- timeout (float): The timeout for this request.
- metadata (Sequence[Tuple[str, str]]): Strings which should be
- sent along with the request as metadata.
-
- Returns:
- google.cloud.webrisk_v1.types.ComputeThreatListDiffResponse:
-
- """
- # Create or coerce a protobuf request object.
- # Sanity check: If we got a request object, we should *not* have
- # gotten any keyword arguments that map to the request.
- has_flattened_params = any([threat_type, version_token, constraints])
- if request is not None and has_flattened_params:
- raise ValueError("If the `request` argument is set, then none of "
- "the individual field arguments should be set.")
-
- request = webrisk.ComputeThreatListDiffRequest(request)
-
- # If we have keyword arguments corresponding to fields on the
- # request, apply these.
- if threat_type is not None:
- request.threat_type = threat_type
- if version_token is not None:
- request.version_token = version_token
- if constraints is not None:
- request.constraints = constraints
-
- # Wrap the RPC method; this adds retry and timeout information,
- # and friendly error handling.
- rpc = gapic_v1.method_async.wrap_method(
- self._client._transport.compute_threat_list_diff,
- default_retry=retries.Retry(
-initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
- core_exceptions.DeadlineExceeded,
- core_exceptions.ServiceUnavailable,
- ),
- deadline=600.0,
- ),
- default_timeout=600.0,
- client_info=DEFAULT_CLIENT_INFO,
- )
-
- # Send the request.
- response = await rpc(
- request,
- retry=retry,
- timeout=timeout,
- metadata=metadata,
- )
-
- # Done; return the response.
- return response
-
- async def search_uris(self,
- request: webrisk.SearchUrisRequest = None,
- *,
- uri: str = None,
- threat_types: Sequence[webrisk.ThreatType] = None,
- retry: retries.Retry = gapic_v1.method.DEFAULT,
- timeout: float = None,
- metadata: Sequence[Tuple[str, str]] = (),
- ) -> webrisk.SearchUrisResponse:
- r"""This method is used to check whether a URI is on a
- given threatList. Multiple threatLists may be searched
- in a single query. The response will list all requested
- threatLists the URI was found to match. If the URI is
- not found on any of the requested ThreatList an empty
- response will be returned.
-
- Args:
- request (:class:`google.cloud.webrisk_v1.types.SearchUrisRequest`):
- The request object. Request to check URI entries against
- threatLists.
- uri (:class:`str`):
- Required. The URI to be checked for
- matches.
-
- This corresponds to the ``uri`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- threat_types (:class:`Sequence[google.cloud.webrisk_v1.types.ThreatType]`):
- Required. The ThreatLists to search
- in. Multiple ThreatLists may be
- specified.
-
- This corresponds to the ``threat_types`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
- should be retried.
- timeout (float): The timeout for this request.
- metadata (Sequence[Tuple[str, str]]): Strings which should be
- sent along with the request as metadata.
-
- Returns:
- google.cloud.webrisk_v1.types.SearchUrisResponse:
-
- """
- # Create or coerce a protobuf request object.
- # Sanity check: If we got a request object, we should *not* have
- # gotten any keyword arguments that map to the request.
- has_flattened_params = any([uri, threat_types])
- if request is not None and has_flattened_params:
- raise ValueError("If the `request` argument is set, then none of "
- "the individual field arguments should be set.")
-
- request = webrisk.SearchUrisRequest(request)
-
- # If we have keyword arguments corresponding to fields on the
- # request, apply these.
- if uri is not None:
- request.uri = uri
- if threat_types:
- request.threat_types.extend(threat_types)
-
- # Wrap the RPC method; this adds retry and timeout information,
- # and friendly error handling.
- rpc = gapic_v1.method_async.wrap_method(
- self._client._transport.search_uris,
- default_retry=retries.Retry(
-initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
- core_exceptions.DeadlineExceeded,
- core_exceptions.ServiceUnavailable,
- ),
- deadline=600.0,
- ),
- default_timeout=600.0,
- client_info=DEFAULT_CLIENT_INFO,
- )
-
- # Send the request.
- response = await rpc(
- request,
- retry=retry,
- timeout=timeout,
- metadata=metadata,
- )
-
- # Done; return the response.
- return response
-
- async def search_hashes(self,
- request: webrisk.SearchHashesRequest = None,
- *,
- hash_prefix: bytes = None,
- threat_types: Sequence[webrisk.ThreatType] = None,
- retry: retries.Retry = gapic_v1.method.DEFAULT,
- timeout: float = None,
- metadata: Sequence[Tuple[str, str]] = (),
- ) -> webrisk.SearchHashesResponse:
- r"""Gets the full hashes that match the requested hash
- prefix. This is used after a hash prefix is looked up in
- a threatList and there is a match. The client side
- threatList only holds partial hashes so the client must
- query this method to determine if there is a full hash
- match of a threat.
-
- Args:
- request (:class:`google.cloud.webrisk_v1.types.SearchHashesRequest`):
- The request object. Request to return full hashes
- matched by the provided hash prefixes.
- hash_prefix (:class:`bytes`):
- A hash prefix, consisting of the most
- significant 4-32 bytes of a SHA256 hash.
- For JSON requests, this field is
- base64-encoded.
-
- This corresponds to the ``hash_prefix`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- threat_types (:class:`Sequence[google.cloud.webrisk_v1.types.ThreatType]`):
- Required. The ThreatLists to search
- in. Multiple ThreatLists may be
- specified.
-
- This corresponds to the ``threat_types`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
- should be retried.
- timeout (float): The timeout for this request.
- metadata (Sequence[Tuple[str, str]]): Strings which should be
- sent along with the request as metadata.
-
- Returns:
- google.cloud.webrisk_v1.types.SearchHashesResponse:
-
- """
- # Create or coerce a protobuf request object.
- # Sanity check: If we got a request object, we should *not* have
- # gotten any keyword arguments that map to the request.
- has_flattened_params = any([hash_prefix, threat_types])
- if request is not None and has_flattened_params:
- raise ValueError("If the `request` argument is set, then none of "
- "the individual field arguments should be set.")
-
- request = webrisk.SearchHashesRequest(request)
-
- # If we have keyword arguments corresponding to fields on the
- # request, apply these.
- if hash_prefix is not None:
- request.hash_prefix = hash_prefix
- if threat_types:
- request.threat_types.extend(threat_types)
-
- # Wrap the RPC method; this adds retry and timeout information,
- # and friendly error handling.
- rpc = gapic_v1.method_async.wrap_method(
- self._client._transport.search_hashes,
- default_retry=retries.Retry(
-initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
- core_exceptions.DeadlineExceeded,
- core_exceptions.ServiceUnavailable,
- ),
- deadline=600.0,
- ),
- default_timeout=600.0,
- client_info=DEFAULT_CLIENT_INFO,
- )
-
- # Send the request.
- response = await rpc(
- request,
- retry=retry,
- timeout=timeout,
- metadata=metadata,
- )
-
- # Done; return the response.
- return response
-
- async def create_submission(self,
- request: webrisk.CreateSubmissionRequest = None,
- *,
- parent: str = None,
- submission: webrisk.Submission = None,
- retry: retries.Retry = gapic_v1.method.DEFAULT,
- timeout: float = None,
- metadata: Sequence[Tuple[str, str]] = (),
- ) -> webrisk.Submission:
- r"""Creates a Submission of a URI suspected of containing phishing
- content to be reviewed. If the result verifies the existence of
- malicious phishing content, the site will be added to the
- `Google's Social Engineering
- lists `__
- in order to protect users that could get exposed to this threat
- in the future. Only projects with CREATE_SUBMISSION_USERS
- visibility can use this method.
-
- Args:
- request (:class:`google.cloud.webrisk_v1.types.CreateSubmissionRequest`):
- The request object. Request to send a potentially phishy
- URI to WebRisk.
- parent (:class:`str`):
- Required. The name of the project that is making the
- submission. This string is in the format
- "projects/{project_number}".
-
- This corresponds to the ``parent`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- submission (:class:`google.cloud.webrisk_v1.types.Submission`):
- Required. The submission that
- contains the content of the phishing
- report.
-
- This corresponds to the ``submission`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
- should be retried.
- timeout (float): The timeout for this request.
- metadata (Sequence[Tuple[str, str]]): Strings which should be
- sent along with the request as metadata.
-
- Returns:
- google.cloud.webrisk_v1.types.Submission:
- Wraps a URI that might be displaying
- phishing content.
-
- """
- # Create or coerce a protobuf request object.
- # Sanity check: If we got a request object, we should *not* have
- # gotten any keyword arguments that map to the request.
- has_flattened_params = any([parent, submission])
- if request is not None and has_flattened_params:
- raise ValueError("If the `request` argument is set, then none of "
- "the individual field arguments should be set.")
-
- request = webrisk.CreateSubmissionRequest(request)
-
- # If we have keyword arguments corresponding to fields on the
- # request, apply these.
- if parent is not None:
- request.parent = parent
- if submission is not None:
- request.submission = submission
-
- # Wrap the RPC method; this adds retry and timeout information,
- # and friendly error handling.
- rpc = gapic_v1.method_async.wrap_method(
- self._client._transport.create_submission,
- default_timeout=60.0,
- client_info=DEFAULT_CLIENT_INFO,
- )
-
- # Certain fields should be provided within the metadata header;
- # add these here.
- metadata = tuple(metadata) + (
- gapic_v1.routing_header.to_grpc_metadata((
- ("parent", request.parent),
- )),
- )
-
- # Send the request.
- response = await rpc(
- request,
- retry=retry,
- timeout=timeout,
- metadata=metadata,
- )
-
- # Done; return the response.
- return response
-
-
-
-
-
-try:
- DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(
- gapic_version=pkg_resources.get_distribution(
- "google-cloud-webrisk",
- ).version,
- )
-except pkg_resources.DistributionNotFound:
- DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo()
-
-
-__all__ = (
- "WebRiskServiceAsyncClient",
-)
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/client.py b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/client.py
deleted file mode 100644
index 6d3b99c..0000000
--- a/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/client.py
+++ /dev/null
@@ -1,698 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-from collections import OrderedDict
-from distutils import util
-import os
-import re
-from typing import Callable, Dict, Optional, Sequence, Tuple, Type, Union
-import pkg_resources
-
-from google.api_core import client_options as client_options_lib # type: ignore
-from google.api_core import exceptions as core_exceptions # type: ignore
-from google.api_core import gapic_v1 # type: ignore
-from google.api_core import retry as retries # type: ignore
-from google.auth import credentials as ga_credentials # type: ignore
-from google.auth.transport import mtls # type: ignore
-from google.auth.transport.grpc import SslCredentials # type: ignore
-from google.auth.exceptions import MutualTLSChannelError # type: ignore
-from google.oauth2 import service_account # type: ignore
-
-from google.cloud.webrisk_v1.types import webrisk
-from google.protobuf import timestamp_pb2 # type: ignore
-from .transports.base import WebRiskServiceTransport, DEFAULT_CLIENT_INFO
-from .transports.grpc import WebRiskServiceGrpcTransport
-from .transports.grpc_asyncio import WebRiskServiceGrpcAsyncIOTransport
-
-
-class WebRiskServiceClientMeta(type):
- """Metaclass for the WebRiskService client.
-
- This provides class-level methods for building and retrieving
- support objects (e.g. transport) without polluting the client instance
- objects.
- """
- _transport_registry = OrderedDict() # type: Dict[str, Type[WebRiskServiceTransport]]
- _transport_registry["grpc"] = WebRiskServiceGrpcTransport
- _transport_registry["grpc_asyncio"] = WebRiskServiceGrpcAsyncIOTransport
-
- def get_transport_class(cls,
- label: str = None,
- ) -> Type[WebRiskServiceTransport]:
- """Returns an appropriate transport class.
-
- Args:
- label: The name of the desired transport. If none is
- provided, then the first transport in the registry is used.
-
- Returns:
- The transport class to use.
- """
- # If a specific transport is requested, return that one.
- if label:
- return cls._transport_registry[label]
-
- # No transport is requested; return the default (that is, the first one
- # in the dictionary).
- return next(iter(cls._transport_registry.values()))
-
-
-class WebRiskServiceClient(metaclass=WebRiskServiceClientMeta):
- """Web Risk API defines an interface to detect malicious URLs on
- your website and in client applications.
- """
-
- @staticmethod
- def _get_default_mtls_endpoint(api_endpoint):
- """Converts api endpoint to mTLS endpoint.
-
- Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to
- "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively.
- Args:
- api_endpoint (Optional[str]): the api endpoint to convert.
- Returns:
- str: converted mTLS api endpoint.
- """
- if not api_endpoint:
- return api_endpoint
-
- mtls_endpoint_re = re.compile(
- r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?"
- )
-
- m = mtls_endpoint_re.match(api_endpoint)
- name, mtls, sandbox, googledomain = m.groups()
- if mtls or not googledomain:
- return api_endpoint
-
- if sandbox:
- return api_endpoint.replace(
- "sandbox.googleapis.com", "mtls.sandbox.googleapis.com"
- )
-
- return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com")
-
- DEFAULT_ENDPOINT = "webrisk.googleapis.com"
- DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore
- DEFAULT_ENDPOINT
- )
-
- @classmethod
- def from_service_account_info(cls, info: dict, *args, **kwargs):
- """Creates an instance of this client using the provided credentials
- info.
-
- Args:
- info (dict): The service account private key info.
- args: Additional arguments to pass to the constructor.
- kwargs: Additional arguments to pass to the constructor.
-
- Returns:
- WebRiskServiceClient: The constructed client.
- """
- credentials = service_account.Credentials.from_service_account_info(info)
- kwargs["credentials"] = credentials
- return cls(*args, **kwargs)
-
- @classmethod
- def from_service_account_file(cls, filename: str, *args, **kwargs):
- """Creates an instance of this client using the provided credentials
- file.
-
- Args:
- filename (str): The path to the service account private key json
- file.
- args: Additional arguments to pass to the constructor.
- kwargs: Additional arguments to pass to the constructor.
-
- Returns:
- WebRiskServiceClient: The constructed client.
- """
- credentials = service_account.Credentials.from_service_account_file(
- filename)
- kwargs["credentials"] = credentials
- return cls(*args, **kwargs)
-
- from_service_account_json = from_service_account_file
-
- @property
- def transport(self) -> WebRiskServiceTransport:
- """Returns the transport used by the client instance.
-
- Returns:
- WebRiskServiceTransport: The transport used by the client
- instance.
- """
- return self._transport
-
- @staticmethod
- def common_billing_account_path(billing_account: str, ) -> str:
- """Returns a fully-qualified billing_account string."""
- return "billingAccounts/{billing_account}".format(billing_account=billing_account, )
-
- @staticmethod
- def parse_common_billing_account_path(path: str) -> Dict[str,str]:
- """Parse a billing_account path into its component segments."""
- m = re.match(r"^billingAccounts/(?P.+?)$", path)
- return m.groupdict() if m else {}
-
- @staticmethod
- def common_folder_path(folder: str, ) -> str:
- """Returns a fully-qualified folder string."""
- return "folders/{folder}".format(folder=folder, )
-
- @staticmethod
- def parse_common_folder_path(path: str) -> Dict[str,str]:
- """Parse a folder path into its component segments."""
- m = re.match(r"^folders/(?P.+?)$", path)
- return m.groupdict() if m else {}
-
- @staticmethod
- def common_organization_path(organization: str, ) -> str:
- """Returns a fully-qualified organization string."""
- return "organizations/{organization}".format(organization=organization, )
-
- @staticmethod
- def parse_common_organization_path(path: str) -> Dict[str,str]:
- """Parse a organization path into its component segments."""
- m = re.match(r"^organizations/(?P.+?)$", path)
- return m.groupdict() if m else {}
-
- @staticmethod
- def common_project_path(project: str, ) -> str:
- """Returns a fully-qualified project string."""
- return "projects/{project}".format(project=project, )
-
- @staticmethod
- def parse_common_project_path(path: str) -> Dict[str,str]:
- """Parse a project path into its component segments."""
- m = re.match(r"^projects/(?P.+?)$", path)
- return m.groupdict() if m else {}
-
- @staticmethod
- def common_location_path(project: str, location: str, ) -> str:
- """Returns a fully-qualified location string."""
- return "projects/{project}/locations/{location}".format(project=project, location=location, )
-
- @staticmethod
- def parse_common_location_path(path: str) -> Dict[str,str]:
- """Parse a location path into its component segments."""
- m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path)
- return m.groupdict() if m else {}
-
- def __init__(self, *,
- credentials: Optional[ga_credentials.Credentials] = None,
- transport: Union[str, WebRiskServiceTransport, None] = None,
- client_options: Optional[client_options_lib.ClientOptions] = None,
- client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
- ) -> None:
- """Instantiates the web risk service client.
-
- Args:
- credentials (Optional[google.auth.credentials.Credentials]): The
- authorization credentials to attach to requests. These
- credentials identify the application to the service; if none
- are specified, the client will attempt to ascertain the
- credentials from the environment.
- transport (Union[str, WebRiskServiceTransport]): The
- transport to use. If set to None, a transport is chosen
- automatically.
- client_options (google.api_core.client_options.ClientOptions): Custom options for the
- client. It won't take effect if a ``transport`` instance is provided.
- (1) The ``api_endpoint`` property can be used to override the
- default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT
- environment variable can also be used to override the endpoint:
- "always" (always use the default mTLS endpoint), "never" (always
- use the default regular endpoint) and "auto" (auto switch to the
- default mTLS endpoint if client certificate is present, this is
- the default value). However, the ``api_endpoint`` property takes
- precedence if provided.
- (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable
- is "true", then the ``client_cert_source`` property can be used
- to provide client certificate for mutual TLS transport. If
- not provided, the default SSL client certificate will be used if
- present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not
- set, no client certificate will be used.
- client_info (google.api_core.gapic_v1.client_info.ClientInfo):
- The client info used to send a user-agent string along with
- API requests. If ``None``, then default info will be used.
- Generally, you only need to set this if you're developing
- your own client library.
-
- Raises:
- google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport
- creation failed for any reason.
- """
- if isinstance(client_options, dict):
- client_options = client_options_lib.from_dict(client_options)
- if client_options is None:
- client_options = client_options_lib.ClientOptions()
-
- # Create SSL credentials for mutual TLS if needed.
- use_client_cert = bool(util.strtobool(os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false")))
-
- client_cert_source_func = None
- is_mtls = False
- if use_client_cert:
- if client_options.client_cert_source:
- is_mtls = True
- client_cert_source_func = client_options.client_cert_source
- else:
- is_mtls = mtls.has_default_client_cert_source()
- if is_mtls:
- client_cert_source_func = mtls.default_client_cert_source()
- else:
- client_cert_source_func = None
-
- # Figure out which api endpoint to use.
- if client_options.api_endpoint is not None:
- api_endpoint = client_options.api_endpoint
- else:
- use_mtls_env = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto")
- if use_mtls_env == "never":
- api_endpoint = self.DEFAULT_ENDPOINT
- elif use_mtls_env == "always":
- api_endpoint = self.DEFAULT_MTLS_ENDPOINT
- elif use_mtls_env == "auto":
- if is_mtls:
- api_endpoint = self.DEFAULT_MTLS_ENDPOINT
- else:
- api_endpoint = self.DEFAULT_ENDPOINT
- else:
- raise MutualTLSChannelError(
- "Unsupported GOOGLE_API_USE_MTLS_ENDPOINT value. Accepted "
- "values: never, auto, always"
- )
-
- # Save or instantiate the transport.
- # Ordinarily, we provide the transport, but allowing a custom transport
- # instance provides an extensibility point for unusual situations.
- if isinstance(transport, WebRiskServiceTransport):
- # transport is a WebRiskServiceTransport instance.
- if credentials or client_options.credentials_file:
- raise ValueError("When providing a transport instance, "
- "provide its credentials directly.")
- if client_options.scopes:
- raise ValueError(
- "When providing a transport instance, provide its scopes "
- "directly."
- )
- self._transport = transport
- else:
- Transport = type(self).get_transport_class(transport)
- self._transport = Transport(
- credentials=credentials,
- credentials_file=client_options.credentials_file,
- host=api_endpoint,
- scopes=client_options.scopes,
- client_cert_source_for_mtls=client_cert_source_func,
- quota_project_id=client_options.quota_project_id,
- client_info=client_info,
- )
-
- def compute_threat_list_diff(self,
- request: webrisk.ComputeThreatListDiffRequest = None,
- *,
- threat_type: webrisk.ThreatType = None,
- version_token: bytes = None,
- constraints: webrisk.ComputeThreatListDiffRequest.Constraints = None,
- retry: retries.Retry = gapic_v1.method.DEFAULT,
- timeout: float = None,
- metadata: Sequence[Tuple[str, str]] = (),
- ) -> webrisk.ComputeThreatListDiffResponse:
- r"""Gets the most recent threat list diffs. These diffs
- should be applied to a local database of hashes to keep
- it up-to-date. If the local database is empty or
- excessively out-of-date, a complete snapshot of the
- database will be returned. This Method only updates a
- single ThreatList at a time. To update multiple
- ThreatList databases, this method needs to be called
- once for each list.
-
- Args:
- request (google.cloud.webrisk_v1.types.ComputeThreatListDiffRequest):
- The request object. Describes an API diff request.
- threat_type (google.cloud.webrisk_v1.types.ThreatType):
- Required. The threat list to update.
- Only a single ThreatType should be
- specified.
-
- This corresponds to the ``threat_type`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- version_token (bytes):
- The current version token of the
- client for the requested list (the
- client version that was received from
- the last successful diff). If the client
- does not have a version token (this is
- the first time calling
- ComputeThreatListDiff), this may be left
- empty and a full database snapshot will
- be returned.
-
- This corresponds to the ``version_token`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- constraints (google.cloud.webrisk_v1.types.ComputeThreatListDiffRequest.Constraints):
- Required. The constraints associated
- with this request.
-
- This corresponds to the ``constraints`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
- should be retried.
- timeout (float): The timeout for this request.
- metadata (Sequence[Tuple[str, str]]): Strings which should be
- sent along with the request as metadata.
-
- Returns:
- google.cloud.webrisk_v1.types.ComputeThreatListDiffResponse:
-
- """
- # Create or coerce a protobuf request object.
- # Sanity check: If we got a request object, we should *not* have
- # gotten any keyword arguments that map to the request.
- has_flattened_params = any([threat_type, version_token, constraints])
- if request is not None and has_flattened_params:
- raise ValueError('If the `request` argument is set, then none of '
- 'the individual field arguments should be set.')
-
- # Minor optimization to avoid making a copy if the user passes
- # in a webrisk.ComputeThreatListDiffRequest.
- # There's no risk of modifying the input as we've already verified
- # there are no flattened fields.
- if not isinstance(request, webrisk.ComputeThreatListDiffRequest):
- request = webrisk.ComputeThreatListDiffRequest(request)
- # If we have keyword arguments corresponding to fields on the
- # request, apply these.
- if threat_type is not None:
- request.threat_type = threat_type
- if version_token is not None:
- request.version_token = version_token
- if constraints is not None:
- request.constraints = constraints
-
- # Wrap the RPC method; this adds retry and timeout information,
- # and friendly error handling.
- rpc = self._transport._wrapped_methods[self._transport.compute_threat_list_diff]
-
- # Send the request.
- response = rpc(
- request,
- retry=retry,
- timeout=timeout,
- metadata=metadata,
- )
-
- # Done; return the response.
- return response
-
- def search_uris(self,
- request: webrisk.SearchUrisRequest = None,
- *,
- uri: str = None,
- threat_types: Sequence[webrisk.ThreatType] = None,
- retry: retries.Retry = gapic_v1.method.DEFAULT,
- timeout: float = None,
- metadata: Sequence[Tuple[str, str]] = (),
- ) -> webrisk.SearchUrisResponse:
- r"""This method is used to check whether a URI is on a
- given threatList. Multiple threatLists may be searched
- in a single query. The response will list all requested
- threatLists the URI was found to match. If the URI is
- not found on any of the requested ThreatList an empty
- response will be returned.
-
- Args:
- request (google.cloud.webrisk_v1.types.SearchUrisRequest):
- The request object. Request to check URI entries against
- threatLists.
- uri (str):
- Required. The URI to be checked for
- matches.
-
- This corresponds to the ``uri`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- threat_types (Sequence[google.cloud.webrisk_v1.types.ThreatType]):
- Required. The ThreatLists to search
- in. Multiple ThreatLists may be
- specified.
-
- This corresponds to the ``threat_types`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
- should be retried.
- timeout (float): The timeout for this request.
- metadata (Sequence[Tuple[str, str]]): Strings which should be
- sent along with the request as metadata.
-
- Returns:
- google.cloud.webrisk_v1.types.SearchUrisResponse:
-
- """
- # Create or coerce a protobuf request object.
- # Sanity check: If we got a request object, we should *not* have
- # gotten any keyword arguments that map to the request.
- has_flattened_params = any([uri, threat_types])
- if request is not None and has_flattened_params:
- raise ValueError('If the `request` argument is set, then none of '
- 'the individual field arguments should be set.')
-
- # Minor optimization to avoid making a copy if the user passes
- # in a webrisk.SearchUrisRequest.
- # There's no risk of modifying the input as we've already verified
- # there are no flattened fields.
- if not isinstance(request, webrisk.SearchUrisRequest):
- request = webrisk.SearchUrisRequest(request)
- # If we have keyword arguments corresponding to fields on the
- # request, apply these.
- if uri is not None:
- request.uri = uri
- if threat_types is not None:
- request.threat_types = threat_types
-
- # Wrap the RPC method; this adds retry and timeout information,
- # and friendly error handling.
- rpc = self._transport._wrapped_methods[self._transport.search_uris]
-
- # Send the request.
- response = rpc(
- request,
- retry=retry,
- timeout=timeout,
- metadata=metadata,
- )
-
- # Done; return the response.
- return response
-
- def search_hashes(self,
- request: webrisk.SearchHashesRequest = None,
- *,
- hash_prefix: bytes = None,
- threat_types: Sequence[webrisk.ThreatType] = None,
- retry: retries.Retry = gapic_v1.method.DEFAULT,
- timeout: float = None,
- metadata: Sequence[Tuple[str, str]] = (),
- ) -> webrisk.SearchHashesResponse:
- r"""Gets the full hashes that match the requested hash
- prefix. This is used after a hash prefix is looked up in
- a threatList and there is a match. The client side
- threatList only holds partial hashes so the client must
- query this method to determine if there is a full hash
- match of a threat.
-
- Args:
- request (google.cloud.webrisk_v1.types.SearchHashesRequest):
- The request object. Request to return full hashes
- matched by the provided hash prefixes.
- hash_prefix (bytes):
- A hash prefix, consisting of the most
- significant 4-32 bytes of a SHA256 hash.
- For JSON requests, this field is
- base64-encoded.
-
- This corresponds to the ``hash_prefix`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- threat_types (Sequence[google.cloud.webrisk_v1.types.ThreatType]):
- Required. The ThreatLists to search
- in. Multiple ThreatLists may be
- specified.
-
- This corresponds to the ``threat_types`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
- should be retried.
- timeout (float): The timeout for this request.
- metadata (Sequence[Tuple[str, str]]): Strings which should be
- sent along with the request as metadata.
-
- Returns:
- google.cloud.webrisk_v1.types.SearchHashesResponse:
-
- """
- # Create or coerce a protobuf request object.
- # Sanity check: If we got a request object, we should *not* have
- # gotten any keyword arguments that map to the request.
- has_flattened_params = any([hash_prefix, threat_types])
- if request is not None and has_flattened_params:
- raise ValueError('If the `request` argument is set, then none of '
- 'the individual field arguments should be set.')
-
- # Minor optimization to avoid making a copy if the user passes
- # in a webrisk.SearchHashesRequest.
- # There's no risk of modifying the input as we've already verified
- # there are no flattened fields.
- if not isinstance(request, webrisk.SearchHashesRequest):
- request = webrisk.SearchHashesRequest(request)
- # If we have keyword arguments corresponding to fields on the
- # request, apply these.
- if hash_prefix is not None:
- request.hash_prefix = hash_prefix
- if threat_types is not None:
- request.threat_types = threat_types
-
- # Wrap the RPC method; this adds retry and timeout information,
- # and friendly error handling.
- rpc = self._transport._wrapped_methods[self._transport.search_hashes]
-
- # Send the request.
- response = rpc(
- request,
- retry=retry,
- timeout=timeout,
- metadata=metadata,
- )
-
- # Done; return the response.
- return response
-
- def create_submission(self,
- request: webrisk.CreateSubmissionRequest = None,
- *,
- parent: str = None,
- submission: webrisk.Submission = None,
- retry: retries.Retry = gapic_v1.method.DEFAULT,
- timeout: float = None,
- metadata: Sequence[Tuple[str, str]] = (),
- ) -> webrisk.Submission:
- r"""Creates a Submission of a URI suspected of containing phishing
- content to be reviewed. If the result verifies the existence of
- malicious phishing content, the site will be added to the
- `Google's Social Engineering
- lists `__
- in order to protect users that could get exposed to this threat
- in the future. Only projects with CREATE_SUBMISSION_USERS
- visibility can use this method.
-
- Args:
- request (google.cloud.webrisk_v1.types.CreateSubmissionRequest):
- The request object. Request to send a potentially phishy
- URI to WebRisk.
- parent (str):
- Required. The name of the project that is making the
- submission. This string is in the format
- "projects/{project_number}".
-
- This corresponds to the ``parent`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- submission (google.cloud.webrisk_v1.types.Submission):
- Required. The submission that
- contains the content of the phishing
- report.
-
- This corresponds to the ``submission`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
- should be retried.
- timeout (float): The timeout for this request.
- metadata (Sequence[Tuple[str, str]]): Strings which should be
- sent along with the request as metadata.
-
- Returns:
- google.cloud.webrisk_v1.types.Submission:
- Wraps a URI that might be displaying
- phishing content.
-
- """
- # Create or coerce a protobuf request object.
- # Sanity check: If we got a request object, we should *not* have
- # gotten any keyword arguments that map to the request.
- has_flattened_params = any([parent, submission])
- if request is not None and has_flattened_params:
- raise ValueError('If the `request` argument is set, then none of '
- 'the individual field arguments should be set.')
-
- # Minor optimization to avoid making a copy if the user passes
- # in a webrisk.CreateSubmissionRequest.
- # There's no risk of modifying the input as we've already verified
- # there are no flattened fields.
- if not isinstance(request, webrisk.CreateSubmissionRequest):
- request = webrisk.CreateSubmissionRequest(request)
- # If we have keyword arguments corresponding to fields on the
- # request, apply these.
- if parent is not None:
- request.parent = parent
- if submission is not None:
- request.submission = submission
-
- # Wrap the RPC method; this adds retry and timeout information,
- # and friendly error handling.
- rpc = self._transport._wrapped_methods[self._transport.create_submission]
-
- # Certain fields should be provided within the metadata header;
- # add these here.
- metadata = tuple(metadata) + (
- gapic_v1.routing_header.to_grpc_metadata((
- ("parent", request.parent),
- )),
- )
-
- # Send the request.
- response = rpc(
- request,
- retry=retry,
- timeout=timeout,
- metadata=metadata,
- )
-
- # Done; return the response.
- return response
-
-
-
-
-
-try:
- DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(
- gapic_version=pkg_resources.get_distribution(
- "google-cloud-webrisk",
- ).version,
- )
-except pkg_resources.DistributionNotFound:
- DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo()
-
-
-__all__ = (
- "WebRiskServiceClient",
-)
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/__init__.py b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/__init__.py
deleted file mode 100644
index c724451..0000000
--- a/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/__init__.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-from collections import OrderedDict
-from typing import Dict, Type
-
-from .base import WebRiskServiceTransport
-from .grpc import WebRiskServiceGrpcTransport
-from .grpc_asyncio import WebRiskServiceGrpcAsyncIOTransport
-
-
-# Compile a registry of transports.
-_transport_registry = OrderedDict() # type: Dict[str, Type[WebRiskServiceTransport]]
-_transport_registry['grpc'] = WebRiskServiceGrpcTransport
-_transport_registry['grpc_asyncio'] = WebRiskServiceGrpcAsyncIOTransport
-
-__all__ = (
- 'WebRiskServiceTransport',
- 'WebRiskServiceGrpcTransport',
- 'WebRiskServiceGrpcAsyncIOTransport',
-)
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/base.py b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/base.py
deleted file mode 100644
index fe8c43f..0000000
--- a/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/base.py
+++ /dev/null
@@ -1,231 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-import abc
-from typing import Awaitable, Callable, Dict, Optional, Sequence, Union
-import packaging.version
-import pkg_resources
-
-import google.auth # type: ignore
-import google.api_core # type: ignore
-from google.api_core import exceptions as core_exceptions # type: ignore
-from google.api_core import gapic_v1 # type: ignore
-from google.api_core import retry as retries # type: ignore
-from google.auth import credentials as ga_credentials # type: ignore
-from google.oauth2 import service_account # type: ignore
-
-from google.cloud.webrisk_v1.types import webrisk
-
-try:
- DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(
- gapic_version=pkg_resources.get_distribution(
- 'google-cloud-webrisk',
- ).version,
- )
-except pkg_resources.DistributionNotFound:
- DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo()
-
-try:
- # google.auth.__version__ was added in 1.26.0
- _GOOGLE_AUTH_VERSION = google.auth.__version__
-except AttributeError:
- try: # try pkg_resources if it is available
- _GOOGLE_AUTH_VERSION = pkg_resources.get_distribution("google-auth").version
- except pkg_resources.DistributionNotFound: # pragma: NO COVER
- _GOOGLE_AUTH_VERSION = None
-
-
-class WebRiskServiceTransport(abc.ABC):
- """Abstract transport class for WebRiskService."""
-
- AUTH_SCOPES = (
- 'https://www.googleapis.com/auth/cloud-platform',
- )
-
- DEFAULT_HOST: str = 'webrisk.googleapis.com'
- def __init__(
- self, *,
- host: str = DEFAULT_HOST,
- credentials: ga_credentials.Credentials = None,
- credentials_file: Optional[str] = None,
- scopes: Optional[Sequence[str]] = None,
- quota_project_id: Optional[str] = None,
- client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
- always_use_jwt_access: Optional[bool] = False,
- **kwargs,
- ) -> None:
- """Instantiate the transport.
-
- Args:
- host (Optional[str]):
- The hostname to connect to.
- credentials (Optional[google.auth.credentials.Credentials]): The
- authorization credentials to attach to requests. These
- credentials identify the application to the service; if none
- are specified, the client will attempt to ascertain the
- credentials from the environment.
- credentials_file (Optional[str]): A file with credentials that can
- be loaded with :func:`google.auth.load_credentials_from_file`.
- This argument is mutually exclusive with credentials.
- scopes (Optional[Sequence[str]]): A list of scopes.
- quota_project_id (Optional[str]): An optional project to use for billing
- and quota.
- client_info (google.api_core.gapic_v1.client_info.ClientInfo):
- The client info used to send a user-agent string along with
- API requests. If ``None``, then default info will be used.
- Generally, you only need to set this if you're developing
- your own client library.
- always_use_jwt_access (Optional[bool]): Whether self signed JWT should
- be used for service account credentials.
- """
- # Save the hostname. Default to port 443 (HTTPS) if none is specified.
- if ':' not in host:
- host += ':443'
- self._host = host
-
- scopes_kwargs = self._get_scopes_kwargs(self._host, scopes)
-
- # Save the scopes.
- self._scopes = scopes
-
- # If no credentials are provided, then determine the appropriate
- # defaults.
- if credentials and credentials_file:
- raise core_exceptions.DuplicateCredentialArgs("'credentials_file' and 'credentials' are mutually exclusive")
-
- if credentials_file is not None:
- credentials, _ = google.auth.load_credentials_from_file(
- credentials_file,
- **scopes_kwargs,
- quota_project_id=quota_project_id
- )
-
- elif credentials is None:
- credentials, _ = google.auth.default(**scopes_kwargs, quota_project_id=quota_project_id)
-
- # If the credentials is service account credentials, then always try to use self signed JWT.
- if always_use_jwt_access and isinstance(credentials, service_account.Credentials) and hasattr(service_account.Credentials, "with_always_use_jwt_access"):
- credentials = credentials.with_always_use_jwt_access(True)
-
- # Save the credentials.
- self._credentials = credentials
-
- # TODO(busunkim): This method is in the base transport
- # to avoid duplicating code across the transport classes. These functions
- # should be deleted once the minimum required versions of google-auth is increased.
-
- # TODO: Remove this function once google-auth >= 1.25.0 is required
- @classmethod
- def _get_scopes_kwargs(cls, host: str, scopes: Optional[Sequence[str]]) -> Dict[str, Optional[Sequence[str]]]:
- """Returns scopes kwargs to pass to google-auth methods depending on the google-auth version"""
-
- scopes_kwargs = {}
-
- if _GOOGLE_AUTH_VERSION and (
- packaging.version.parse(_GOOGLE_AUTH_VERSION)
- >= packaging.version.parse("1.25.0")
- ):
- scopes_kwargs = {"scopes": scopes, "default_scopes": cls.AUTH_SCOPES}
- else:
- scopes_kwargs = {"scopes": scopes or cls.AUTH_SCOPES}
-
- return scopes_kwargs
-
- def _prep_wrapped_messages(self, client_info):
- # Precompute the wrapped methods.
- self._wrapped_methods = {
- self.compute_threat_list_diff: gapic_v1.method.wrap_method(
- self.compute_threat_list_diff,
- default_retry=retries.Retry(
-initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
- core_exceptions.DeadlineExceeded,
- core_exceptions.ServiceUnavailable,
- ),
- deadline=600.0,
- ),
- default_timeout=600.0,
- client_info=client_info,
- ),
- self.search_uris: gapic_v1.method.wrap_method(
- self.search_uris,
- default_retry=retries.Retry(
-initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
- core_exceptions.DeadlineExceeded,
- core_exceptions.ServiceUnavailable,
- ),
- deadline=600.0,
- ),
- default_timeout=600.0,
- client_info=client_info,
- ),
- self.search_hashes: gapic_v1.method.wrap_method(
- self.search_hashes,
- default_retry=retries.Retry(
-initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
- core_exceptions.DeadlineExceeded,
- core_exceptions.ServiceUnavailable,
- ),
- deadline=600.0,
- ),
- default_timeout=600.0,
- client_info=client_info,
- ),
- self.create_submission: gapic_v1.method.wrap_method(
- self.create_submission,
- default_timeout=60.0,
- client_info=client_info,
- ),
- }
-
- @property
- def compute_threat_list_diff(self) -> Callable[
- [webrisk.ComputeThreatListDiffRequest],
- Union[
- webrisk.ComputeThreatListDiffResponse,
- Awaitable[webrisk.ComputeThreatListDiffResponse]
- ]]:
- raise NotImplementedError()
-
- @property
- def search_uris(self) -> Callable[
- [webrisk.SearchUrisRequest],
- Union[
- webrisk.SearchUrisResponse,
- Awaitable[webrisk.SearchUrisResponse]
- ]]:
- raise NotImplementedError()
-
- @property
- def search_hashes(self) -> Callable[
- [webrisk.SearchHashesRequest],
- Union[
- webrisk.SearchHashesResponse,
- Awaitable[webrisk.SearchHashesResponse]
- ]]:
- raise NotImplementedError()
-
- @property
- def create_submission(self) -> Callable[
- [webrisk.CreateSubmissionRequest],
- Union[
- webrisk.Submission,
- Awaitable[webrisk.Submission]
- ]]:
- raise NotImplementedError()
-
-
-__all__ = (
- 'WebRiskServiceTransport',
-)
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc.py b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc.py
deleted file mode 100644
index f6c869e..0000000
--- a/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc.py
+++ /dev/null
@@ -1,355 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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 warnings
-from typing import Callable, Dict, Optional, Sequence, Tuple, Union
-
-from google.api_core import grpc_helpers # type: ignore
-from google.api_core import gapic_v1 # type: ignore
-import google.auth # type: ignore
-from google.auth import credentials as ga_credentials # type: ignore
-from google.auth.transport.grpc import SslCredentials # type: ignore
-
-import grpc # type: ignore
-
-from google.cloud.webrisk_v1.types import webrisk
-from .base import WebRiskServiceTransport, DEFAULT_CLIENT_INFO
-
-
-class WebRiskServiceGrpcTransport(WebRiskServiceTransport):
- """gRPC backend transport for WebRiskService.
-
- Web Risk API defines an interface to detect malicious URLs on
- your website and in client applications.
-
- This class defines the same methods as the primary client, so the
- primary client can load the underlying transport implementation
- and call it.
-
- It sends protocol buffers over the wire using gRPC (which is built on
- top of HTTP/2); the ``grpcio`` package must be installed.
- """
- _stubs: Dict[str, Callable]
-
- def __init__(self, *,
- host: str = 'webrisk.googleapis.com',
- credentials: ga_credentials.Credentials = None,
- credentials_file: str = None,
- scopes: Sequence[str] = None,
- channel: grpc.Channel = None,
- api_mtls_endpoint: str = None,
- client_cert_source: Callable[[], Tuple[bytes, bytes]] = None,
- ssl_channel_credentials: grpc.ChannelCredentials = None,
- client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None,
- quota_project_id: Optional[str] = None,
- client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
- always_use_jwt_access: Optional[bool] = False,
- ) -> None:
- """Instantiate the transport.
-
- Args:
- host (Optional[str]):
- The hostname to connect to.
- credentials (Optional[google.auth.credentials.Credentials]): The
- authorization credentials to attach to requests. These
- credentials identify the application to the service; if none
- are specified, the client will attempt to ascertain the
- credentials from the environment.
- This argument is ignored if ``channel`` is provided.
- credentials_file (Optional[str]): A file with credentials that can
- be loaded with :func:`google.auth.load_credentials_from_file`.
- This argument is ignored if ``channel`` is provided.
- scopes (Optional(Sequence[str])): A list of scopes. This argument is
- ignored if ``channel`` is provided.
- channel (Optional[grpc.Channel]): A ``Channel`` instance through
- which to make calls.
- api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint.
- If provided, it overrides the ``host`` argument and tries to create
- a mutual TLS channel with client SSL credentials from
- ``client_cert_source`` or applicatin default SSL credentials.
- client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]):
- Deprecated. A callback to provide client SSL certificate bytes and
- private key bytes, both in PEM format. It is ignored if
- ``api_mtls_endpoint`` is None.
- ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials
- for grpc channel. It is ignored if ``channel`` is provided.
- client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]):
- A callback to provide client certificate bytes and private key bytes,
- both in PEM format. It is used to configure mutual TLS channel. It is
- ignored if ``channel`` or ``ssl_channel_credentials`` is provided.
- quota_project_id (Optional[str]): An optional project to use for billing
- and quota.
- client_info (google.api_core.gapic_v1.client_info.ClientInfo):
- The client info used to send a user-agent string along with
- API requests. If ``None``, then default info will be used.
- Generally, you only need to set this if you're developing
- your own client library.
- always_use_jwt_access (Optional[bool]): Whether self signed JWT should
- be used for service account credentials.
-
- Raises:
- google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport
- creation failed for any reason.
- google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials``
- and ``credentials_file`` are passed.
- """
- self._grpc_channel = None
- self._ssl_channel_credentials = ssl_channel_credentials
- self._stubs: Dict[str, Callable] = {}
-
- if api_mtls_endpoint:
- warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning)
- if client_cert_source:
- warnings.warn("client_cert_source is deprecated", DeprecationWarning)
-
- if channel:
- # Ignore credentials if a channel was passed.
- credentials = False
- # If a channel was explicitly provided, set it.
- self._grpc_channel = channel
- self._ssl_channel_credentials = None
-
- else:
- if api_mtls_endpoint:
- host = api_mtls_endpoint
-
- # Create SSL credentials with client_cert_source or application
- # default SSL credentials.
- if client_cert_source:
- cert, key = client_cert_source()
- self._ssl_channel_credentials = grpc.ssl_channel_credentials(
- certificate_chain=cert, private_key=key
- )
- else:
- self._ssl_channel_credentials = SslCredentials().ssl_credentials
-
- else:
- if client_cert_source_for_mtls and not ssl_channel_credentials:
- cert, key = client_cert_source_for_mtls()
- self._ssl_channel_credentials = grpc.ssl_channel_credentials(
- certificate_chain=cert, private_key=key
- )
-
- # The base transport sets the host, credentials and scopes
- super().__init__(
- host=host,
- credentials=credentials,
- credentials_file=credentials_file,
- scopes=scopes,
- quota_project_id=quota_project_id,
- client_info=client_info,
- always_use_jwt_access=always_use_jwt_access,
- )
-
- if not self._grpc_channel:
- self._grpc_channel = type(self).create_channel(
- self._host,
- credentials=self._credentials,
- credentials_file=credentials_file,
- scopes=self._scopes,
- ssl_credentials=self._ssl_channel_credentials,
- quota_project_id=quota_project_id,
- options=[
- ("grpc.max_send_message_length", -1),
- ("grpc.max_receive_message_length", -1),
- ],
- )
-
- # Wrap messages. This must be done after self._grpc_channel exists
- self._prep_wrapped_messages(client_info)
-
- @classmethod
- def create_channel(cls,
- host: str = 'webrisk.googleapis.com',
- credentials: ga_credentials.Credentials = None,
- credentials_file: str = None,
- scopes: Optional[Sequence[str]] = None,
- quota_project_id: Optional[str] = None,
- **kwargs) -> grpc.Channel:
- """Create and return a gRPC channel object.
- Args:
- host (Optional[str]): The host for the channel to use.
- credentials (Optional[~.Credentials]): The
- authorization credentials to attach to requests. These
- credentials identify this application to the service. If
- none are specified, the client will attempt to ascertain
- the credentials from the environment.
- credentials_file (Optional[str]): A file with credentials that can
- be loaded with :func:`google.auth.load_credentials_from_file`.
- This argument is mutually exclusive with credentials.
- scopes (Optional[Sequence[str]]): A optional list of scopes needed for this
- service. These are only used when credentials are not specified and
- are passed to :func:`google.auth.default`.
- quota_project_id (Optional[str]): An optional project to use for billing
- and quota.
- kwargs (Optional[dict]): Keyword arguments, which are passed to the
- channel creation.
- Returns:
- grpc.Channel: A gRPC channel object.
-
- Raises:
- google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials``
- and ``credentials_file`` are passed.
- """
-
- return grpc_helpers.create_channel(
- host,
- credentials=credentials,
- credentials_file=credentials_file,
- quota_project_id=quota_project_id,
- default_scopes=cls.AUTH_SCOPES,
- scopes=scopes,
- default_host=cls.DEFAULT_HOST,
- **kwargs
- )
-
- @property
- def grpc_channel(self) -> grpc.Channel:
- """Return the channel designed to connect to this service.
- """
- return self._grpc_channel
-
- @property
- def compute_threat_list_diff(self) -> Callable[
- [webrisk.ComputeThreatListDiffRequest],
- webrisk.ComputeThreatListDiffResponse]:
- r"""Return a callable for the compute threat list diff method over gRPC.
-
- Gets the most recent threat list diffs. These diffs
- should be applied to a local database of hashes to keep
- it up-to-date. If the local database is empty or
- excessively out-of-date, a complete snapshot of the
- database will be returned. This Method only updates a
- single ThreatList at a time. To update multiple
- ThreatList databases, this method needs to be called
- once for each list.
-
- Returns:
- Callable[[~.ComputeThreatListDiffRequest],
- ~.ComputeThreatListDiffResponse]:
- A function that, when called, will call the underlying RPC
- on the server.
- """
- # Generate a "stub function" on-the-fly which will actually make
- # the request.
- # gRPC handles serialization and deserialization, so we just need
- # to pass in the functions for each.
- if 'compute_threat_list_diff' not in self._stubs:
- self._stubs['compute_threat_list_diff'] = self.grpc_channel.unary_unary(
- '/google.cloud.webrisk.v1.WebRiskService/ComputeThreatListDiff',
- request_serializer=webrisk.ComputeThreatListDiffRequest.serialize,
- response_deserializer=webrisk.ComputeThreatListDiffResponse.deserialize,
- )
- return self._stubs['compute_threat_list_diff']
-
- @property
- def search_uris(self) -> Callable[
- [webrisk.SearchUrisRequest],
- webrisk.SearchUrisResponse]:
- r"""Return a callable for the search uris method over gRPC.
-
- This method is used to check whether a URI is on a
- given threatList. Multiple threatLists may be searched
- in a single query. The response will list all requested
- threatLists the URI was found to match. If the URI is
- not found on any of the requested ThreatList an empty
- response will be returned.
-
- Returns:
- Callable[[~.SearchUrisRequest],
- ~.SearchUrisResponse]:
- A function that, when called, will call the underlying RPC
- on the server.
- """
- # Generate a "stub function" on-the-fly which will actually make
- # the request.
- # gRPC handles serialization and deserialization, so we just need
- # to pass in the functions for each.
- if 'search_uris' not in self._stubs:
- self._stubs['search_uris'] = self.grpc_channel.unary_unary(
- '/google.cloud.webrisk.v1.WebRiskService/SearchUris',
- request_serializer=webrisk.SearchUrisRequest.serialize,
- response_deserializer=webrisk.SearchUrisResponse.deserialize,
- )
- return self._stubs['search_uris']
-
- @property
- def search_hashes(self) -> Callable[
- [webrisk.SearchHashesRequest],
- webrisk.SearchHashesResponse]:
- r"""Return a callable for the search hashes method over gRPC.
-
- Gets the full hashes that match the requested hash
- prefix. This is used after a hash prefix is looked up in
- a threatList and there is a match. The client side
- threatList only holds partial hashes so the client must
- query this method to determine if there is a full hash
- match of a threat.
-
- Returns:
- Callable[[~.SearchHashesRequest],
- ~.SearchHashesResponse]:
- A function that, when called, will call the underlying RPC
- on the server.
- """
- # Generate a "stub function" on-the-fly which will actually make
- # the request.
- # gRPC handles serialization and deserialization, so we just need
- # to pass in the functions for each.
- if 'search_hashes' not in self._stubs:
- self._stubs['search_hashes'] = self.grpc_channel.unary_unary(
- '/google.cloud.webrisk.v1.WebRiskService/SearchHashes',
- request_serializer=webrisk.SearchHashesRequest.serialize,
- response_deserializer=webrisk.SearchHashesResponse.deserialize,
- )
- return self._stubs['search_hashes']
-
- @property
- def create_submission(self) -> Callable[
- [webrisk.CreateSubmissionRequest],
- webrisk.Submission]:
- r"""Return a callable for the create submission method over gRPC.
-
- Creates a Submission of a URI suspected of containing phishing
- content to be reviewed. If the result verifies the existence of
- malicious phishing content, the site will be added to the
- `Google's Social Engineering
- lists `__
- in order to protect users that could get exposed to this threat
- in the future. Only projects with CREATE_SUBMISSION_USERS
- visibility can use this method.
-
- Returns:
- Callable[[~.CreateSubmissionRequest],
- ~.Submission]:
- A function that, when called, will call the underlying RPC
- on the server.
- """
- # Generate a "stub function" on-the-fly which will actually make
- # the request.
- # gRPC handles serialization and deserialization, so we just need
- # to pass in the functions for each.
- if 'create_submission' not in self._stubs:
- self._stubs['create_submission'] = self.grpc_channel.unary_unary(
- '/google.cloud.webrisk.v1.WebRiskService/CreateSubmission',
- request_serializer=webrisk.CreateSubmissionRequest.serialize,
- response_deserializer=webrisk.Submission.deserialize,
- )
- return self._stubs['create_submission']
-
-
-__all__ = (
- 'WebRiskServiceGrpcTransport',
-)
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc_asyncio.py b/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc_asyncio.py
deleted file mode 100644
index b90914a..0000000
--- a/owl-bot-staging/v1/google/cloud/webrisk_v1/services/web_risk_service/transports/grpc_asyncio.py
+++ /dev/null
@@ -1,359 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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 warnings
-from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union
-
-from google.api_core import gapic_v1 # type: ignore
-from google.api_core import grpc_helpers_async # type: ignore
-from google.auth import credentials as ga_credentials # type: ignore
-from google.auth.transport.grpc import SslCredentials # type: ignore
-import packaging.version
-
-import grpc # type: ignore
-from grpc.experimental import aio # type: ignore
-
-from google.cloud.webrisk_v1.types import webrisk
-from .base import WebRiskServiceTransport, DEFAULT_CLIENT_INFO
-from .grpc import WebRiskServiceGrpcTransport
-
-
-class WebRiskServiceGrpcAsyncIOTransport(WebRiskServiceTransport):
- """gRPC AsyncIO backend transport for WebRiskService.
-
- Web Risk API defines an interface to detect malicious URLs on
- your website and in client applications.
-
- This class defines the same methods as the primary client, so the
- primary client can load the underlying transport implementation
- and call it.
-
- It sends protocol buffers over the wire using gRPC (which is built on
- top of HTTP/2); the ``grpcio`` package must be installed.
- """
-
- _grpc_channel: aio.Channel
- _stubs: Dict[str, Callable] = {}
-
- @classmethod
- def create_channel(cls,
- host: str = 'webrisk.googleapis.com',
- credentials: ga_credentials.Credentials = None,
- credentials_file: Optional[str] = None,
- scopes: Optional[Sequence[str]] = None,
- quota_project_id: Optional[str] = None,
- **kwargs) -> aio.Channel:
- """Create and return a gRPC AsyncIO channel object.
- Args:
- host (Optional[str]): The host for the channel to use.
- credentials (Optional[~.Credentials]): The
- authorization credentials to attach to requests. These
- credentials identify this application to the service. If
- none are specified, the client will attempt to ascertain
- the credentials from the environment.
- credentials_file (Optional[str]): A file with credentials that can
- be loaded with :func:`google.auth.load_credentials_from_file`.
- This argument is ignored if ``channel`` is provided.
- scopes (Optional[Sequence[str]]): A optional list of scopes needed for this
- service. These are only used when credentials are not specified and
- are passed to :func:`google.auth.default`.
- quota_project_id (Optional[str]): An optional project to use for billing
- and quota.
- kwargs (Optional[dict]): Keyword arguments, which are passed to the
- channel creation.
- Returns:
- aio.Channel: A gRPC AsyncIO channel object.
- """
-
- return grpc_helpers_async.create_channel(
- host,
- credentials=credentials,
- credentials_file=credentials_file,
- quota_project_id=quota_project_id,
- default_scopes=cls.AUTH_SCOPES,
- scopes=scopes,
- default_host=cls.DEFAULT_HOST,
- **kwargs
- )
-
- def __init__(self, *,
- host: str = 'webrisk.googleapis.com',
- credentials: ga_credentials.Credentials = None,
- credentials_file: Optional[str] = None,
- scopes: Optional[Sequence[str]] = None,
- channel: aio.Channel = None,
- api_mtls_endpoint: str = None,
- client_cert_source: Callable[[], Tuple[bytes, bytes]] = None,
- ssl_channel_credentials: grpc.ChannelCredentials = None,
- client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None,
- quota_project_id=None,
- client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
- always_use_jwt_access: Optional[bool] = False,
- ) -> None:
- """Instantiate the transport.
-
- Args:
- host (Optional[str]):
- The hostname to connect to.
- credentials (Optional[google.auth.credentials.Credentials]): The
- authorization credentials to attach to requests. These
- credentials identify the application to the service; if none
- are specified, the client will attempt to ascertain the
- credentials from the environment.
- This argument is ignored if ``channel`` is provided.
- credentials_file (Optional[str]): A file with credentials that can
- be loaded with :func:`google.auth.load_credentials_from_file`.
- This argument is ignored if ``channel`` is provided.
- scopes (Optional[Sequence[str]]): A optional list of scopes needed for this
- service. These are only used when credentials are not specified and
- are passed to :func:`google.auth.default`.
- channel (Optional[aio.Channel]): A ``Channel`` instance through
- which to make calls.
- api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint.
- If provided, it overrides the ``host`` argument and tries to create
- a mutual TLS channel with client SSL credentials from
- ``client_cert_source`` or applicatin default SSL credentials.
- client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]):
- Deprecated. A callback to provide client SSL certificate bytes and
- private key bytes, both in PEM format. It is ignored if
- ``api_mtls_endpoint`` is None.
- ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials
- for grpc channel. It is ignored if ``channel`` is provided.
- client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]):
- A callback to provide client certificate bytes and private key bytes,
- both in PEM format. It is used to configure mutual TLS channel. It is
- ignored if ``channel`` or ``ssl_channel_credentials`` is provided.
- quota_project_id (Optional[str]): An optional project to use for billing
- and quota.
- client_info (google.api_core.gapic_v1.client_info.ClientInfo):
- The client info used to send a user-agent string along with
- API requests. If ``None``, then default info will be used.
- Generally, you only need to set this if you're developing
- your own client library.
- always_use_jwt_access (Optional[bool]): Whether self signed JWT should
- be used for service account credentials.
-
- Raises:
- google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport
- creation failed for any reason.
- google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials``
- and ``credentials_file`` are passed.
- """
- self._grpc_channel = None
- self._ssl_channel_credentials = ssl_channel_credentials
- self._stubs: Dict[str, Callable] = {}
-
- if api_mtls_endpoint:
- warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning)
- if client_cert_source:
- warnings.warn("client_cert_source is deprecated", DeprecationWarning)
-
- if channel:
- # Ignore credentials if a channel was passed.
- credentials = False
- # If a channel was explicitly provided, set it.
- self._grpc_channel = channel
- self._ssl_channel_credentials = None
- else:
- if api_mtls_endpoint:
- host = api_mtls_endpoint
-
- # Create SSL credentials with client_cert_source or application
- # default SSL credentials.
- if client_cert_source:
- cert, key = client_cert_source()
- self._ssl_channel_credentials = grpc.ssl_channel_credentials(
- certificate_chain=cert, private_key=key
- )
- else:
- self._ssl_channel_credentials = SslCredentials().ssl_credentials
-
- else:
- if client_cert_source_for_mtls and not ssl_channel_credentials:
- cert, key = client_cert_source_for_mtls()
- self._ssl_channel_credentials = grpc.ssl_channel_credentials(
- certificate_chain=cert, private_key=key
- )
-
- # The base transport sets the host, credentials and scopes
- super().__init__(
- host=host,
- credentials=credentials,
- credentials_file=credentials_file,
- scopes=scopes,
- quota_project_id=quota_project_id,
- client_info=client_info,
- always_use_jwt_access=always_use_jwt_access,
- )
-
- if not self._grpc_channel:
- self._grpc_channel = type(self).create_channel(
- self._host,
- credentials=self._credentials,
- credentials_file=credentials_file,
- scopes=self._scopes,
- ssl_credentials=self._ssl_channel_credentials,
- quota_project_id=quota_project_id,
- options=[
- ("grpc.max_send_message_length", -1),
- ("grpc.max_receive_message_length", -1),
- ],
- )
-
- # Wrap messages. This must be done after self._grpc_channel exists
- self._prep_wrapped_messages(client_info)
-
- @property
- def grpc_channel(self) -> aio.Channel:
- """Create the channel designed to connect to this service.
-
- This property caches on the instance; repeated calls return
- the same channel.
- """
- # Return the channel from cache.
- return self._grpc_channel
-
- @property
- def compute_threat_list_diff(self) -> Callable[
- [webrisk.ComputeThreatListDiffRequest],
- Awaitable[webrisk.ComputeThreatListDiffResponse]]:
- r"""Return a callable for the compute threat list diff method over gRPC.
-
- Gets the most recent threat list diffs. These diffs
- should be applied to a local database of hashes to keep
- it up-to-date. If the local database is empty or
- excessively out-of-date, a complete snapshot of the
- database will be returned. This Method only updates a
- single ThreatList at a time. To update multiple
- ThreatList databases, this method needs to be called
- once for each list.
-
- Returns:
- Callable[[~.ComputeThreatListDiffRequest],
- Awaitable[~.ComputeThreatListDiffResponse]]:
- A function that, when called, will call the underlying RPC
- on the server.
- """
- # Generate a "stub function" on-the-fly which will actually make
- # the request.
- # gRPC handles serialization and deserialization, so we just need
- # to pass in the functions for each.
- if 'compute_threat_list_diff' not in self._stubs:
- self._stubs['compute_threat_list_diff'] = self.grpc_channel.unary_unary(
- '/google.cloud.webrisk.v1.WebRiskService/ComputeThreatListDiff',
- request_serializer=webrisk.ComputeThreatListDiffRequest.serialize,
- response_deserializer=webrisk.ComputeThreatListDiffResponse.deserialize,
- )
- return self._stubs['compute_threat_list_diff']
-
- @property
- def search_uris(self) -> Callable[
- [webrisk.SearchUrisRequest],
- Awaitable[webrisk.SearchUrisResponse]]:
- r"""Return a callable for the search uris method over gRPC.
-
- This method is used to check whether a URI is on a
- given threatList. Multiple threatLists may be searched
- in a single query. The response will list all requested
- threatLists the URI was found to match. If the URI is
- not found on any of the requested ThreatList an empty
- response will be returned.
-
- Returns:
- Callable[[~.SearchUrisRequest],
- Awaitable[~.SearchUrisResponse]]:
- A function that, when called, will call the underlying RPC
- on the server.
- """
- # Generate a "stub function" on-the-fly which will actually make
- # the request.
- # gRPC handles serialization and deserialization, so we just need
- # to pass in the functions for each.
- if 'search_uris' not in self._stubs:
- self._stubs['search_uris'] = self.grpc_channel.unary_unary(
- '/google.cloud.webrisk.v1.WebRiskService/SearchUris',
- request_serializer=webrisk.SearchUrisRequest.serialize,
- response_deserializer=webrisk.SearchUrisResponse.deserialize,
- )
- return self._stubs['search_uris']
-
- @property
- def search_hashes(self) -> Callable[
- [webrisk.SearchHashesRequest],
- Awaitable[webrisk.SearchHashesResponse]]:
- r"""Return a callable for the search hashes method over gRPC.
-
- Gets the full hashes that match the requested hash
- prefix. This is used after a hash prefix is looked up in
- a threatList and there is a match. The client side
- threatList only holds partial hashes so the client must
- query this method to determine if there is a full hash
- match of a threat.
-
- Returns:
- Callable[[~.SearchHashesRequest],
- Awaitable[~.SearchHashesResponse]]:
- A function that, when called, will call the underlying RPC
- on the server.
- """
- # Generate a "stub function" on-the-fly which will actually make
- # the request.
- # gRPC handles serialization and deserialization, so we just need
- # to pass in the functions for each.
- if 'search_hashes' not in self._stubs:
- self._stubs['search_hashes'] = self.grpc_channel.unary_unary(
- '/google.cloud.webrisk.v1.WebRiskService/SearchHashes',
- request_serializer=webrisk.SearchHashesRequest.serialize,
- response_deserializer=webrisk.SearchHashesResponse.deserialize,
- )
- return self._stubs['search_hashes']
-
- @property
- def create_submission(self) -> Callable[
- [webrisk.CreateSubmissionRequest],
- Awaitable[webrisk.Submission]]:
- r"""Return a callable for the create submission method over gRPC.
-
- Creates a Submission of a URI suspected of containing phishing
- content to be reviewed. If the result verifies the existence of
- malicious phishing content, the site will be added to the
- `Google's Social Engineering
- lists `__
- in order to protect users that could get exposed to this threat
- in the future. Only projects with CREATE_SUBMISSION_USERS
- visibility can use this method.
-
- Returns:
- Callable[[~.CreateSubmissionRequest],
- Awaitable[~.Submission]]:
- A function that, when called, will call the underlying RPC
- on the server.
- """
- # Generate a "stub function" on-the-fly which will actually make
- # the request.
- # gRPC handles serialization and deserialization, so we just need
- # to pass in the functions for each.
- if 'create_submission' not in self._stubs:
- self._stubs['create_submission'] = self.grpc_channel.unary_unary(
- '/google.cloud.webrisk.v1.WebRiskService/CreateSubmission',
- request_serializer=webrisk.CreateSubmissionRequest.serialize,
- response_deserializer=webrisk.Submission.deserialize,
- )
- return self._stubs['create_submission']
-
-
-__all__ = (
- 'WebRiskServiceGrpcAsyncIOTransport',
-)
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/types/__init__.py b/owl-bot-staging/v1/google/cloud/webrisk_v1/types/__init__.py
deleted file mode 100644
index 66a7219..0000000
--- a/owl-bot-staging/v1/google/cloud/webrisk_v1/types/__init__.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-from .webrisk import (
- ComputeThreatListDiffRequest,
- ComputeThreatListDiffResponse,
- CreateSubmissionRequest,
- RawHashes,
- RawIndices,
- RiceDeltaEncoding,
- SearchHashesRequest,
- SearchHashesResponse,
- SearchUrisRequest,
- SearchUrisResponse,
- Submission,
- ThreatEntryAdditions,
- ThreatEntryRemovals,
- CompressionType,
- ThreatType,
-)
-
-__all__ = (
- 'ComputeThreatListDiffRequest',
- 'ComputeThreatListDiffResponse',
- 'CreateSubmissionRequest',
- 'RawHashes',
- 'RawIndices',
- 'RiceDeltaEncoding',
- 'SearchHashesRequest',
- 'SearchHashesResponse',
- 'SearchUrisRequest',
- 'SearchUrisResponse',
- 'Submission',
- 'ThreatEntryAdditions',
- 'ThreatEntryRemovals',
- 'CompressionType',
- 'ThreatType',
-)
diff --git a/owl-bot-staging/v1/google/cloud/webrisk_v1/types/webrisk.py b/owl-bot-staging/v1/google/cloud/webrisk_v1/types/webrisk.py
deleted file mode 100644
index 61b2657..0000000
--- a/owl-bot-staging/v1/google/cloud/webrisk_v1/types/webrisk.py
+++ /dev/null
@@ -1,529 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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 proto # type: ignore
-
-from google.protobuf import timestamp_pb2 # type: ignore
-
-
-__protobuf__ = proto.module(
- package='google.cloud.webrisk.v1',
- manifest={
- 'ThreatType',
- 'CompressionType',
- 'ComputeThreatListDiffRequest',
- 'ComputeThreatListDiffResponse',
- 'SearchUrisRequest',
- 'SearchUrisResponse',
- 'SearchHashesRequest',
- 'SearchHashesResponse',
- 'ThreatEntryAdditions',
- 'ThreatEntryRemovals',
- 'RawIndices',
- 'RawHashes',
- 'RiceDeltaEncoding',
- 'Submission',
- 'CreateSubmissionRequest',
- },
-)
-
-
-class ThreatType(proto.Enum):
- r"""The type of threat. This maps dirrectly to the threat list a
- threat may belong to.
- """
- THREAT_TYPE_UNSPECIFIED = 0
- MALWARE = 1
- SOCIAL_ENGINEERING = 2
- UNWANTED_SOFTWARE = 3
-
-
-class CompressionType(proto.Enum):
- r"""The ways in which threat entry sets can be compressed."""
- COMPRESSION_TYPE_UNSPECIFIED = 0
- RAW = 1
- RICE = 2
-
-
-class ComputeThreatListDiffRequest(proto.Message):
- r"""Describes an API diff request.
- Attributes:
- threat_type (google.cloud.webrisk_v1.types.ThreatType):
- Required. The threat list to update. Only a
- single ThreatType should be specified.
- version_token (bytes):
- The current version token of the client for
- the requested list (the client version that was
- received from the last successful diff). If the
- client does not have a version token (this is
- the first time calling ComputeThreatListDiff),
- this may be left empty and a full database
- snapshot will be returned.
- constraints (google.cloud.webrisk_v1.types.ComputeThreatListDiffRequest.Constraints):
- Required. The constraints associated with
- this request.
- """
-
- class Constraints(proto.Message):
- r"""The constraints for this diff.
- Attributes:
- max_diff_entries (int):
- The maximum size in number of entries. The diff will not
- contain more entries than this value. This should be a power
- of 2 between 2\ **10 and 2**\ 20. If zero, no diff size
- limit is set.
- max_database_entries (int):
- Sets the maximum number of entries that the client is
- willing to have in the local database. This should be a
- power of 2 between 2\ **10 and 2**\ 20. If zero, no database
- size limit is set.
- supported_compressions (Sequence[google.cloud.webrisk_v1.types.CompressionType]):
- The compression types supported by the
- client.
- """
-
- max_diff_entries = proto.Field(
- proto.INT32,
- number=1,
- )
- max_database_entries = proto.Field(
- proto.INT32,
- number=2,
- )
- supported_compressions = proto.RepeatedField(
- proto.ENUM,
- number=3,
- enum='CompressionType',
- )
-
- threat_type = proto.Field(
- proto.ENUM,
- number=1,
- enum='ThreatType',
- )
- version_token = proto.Field(
- proto.BYTES,
- number=2,
- )
- constraints = proto.Field(
- proto.MESSAGE,
- number=3,
- message=Constraints,
- )
-
-
-class ComputeThreatListDiffResponse(proto.Message):
- r"""
- Attributes:
- response_type (google.cloud.webrisk_v1.types.ComputeThreatListDiffResponse.ResponseType):
- The type of response. This may indicate that
- an action must be taken by the client when the
- response is received.
- additions (google.cloud.webrisk_v1.types.ThreatEntryAdditions):
- A set of entries to add to a local threat
- type's list.
- removals (google.cloud.webrisk_v1.types.ThreatEntryRemovals):
- A set of entries to remove from a local
- threat type's list. This field may be empty.
- new_version_token (bytes):
- The new opaque client version token. This should be retained
- by the client and passed into the next call of
- ComputeThreatListDiff as 'version_token'. A separate version
- token should be stored and used for each threatList.
- checksum (google.cloud.webrisk_v1.types.ComputeThreatListDiffResponse.Checksum):
- The expected SHA256 hash of the client state;
- that is, of the sorted list of all hashes
- present in the database after applying the
- provided diff. If the client state doesn't match
- the expected state, the client must discard this
- diff and retry later.
- recommended_next_diff (google.protobuf.timestamp_pb2.Timestamp):
- The soonest the client should wait before
- issuing any diff request. Querying sooner is
- unlikely to produce a meaningful diff. Waiting
- longer is acceptable considering the use case.
- If this field is not set clients may update as
- soon as they want.
- """
- class ResponseType(proto.Enum):
- r"""The type of response sent to the client."""
- RESPONSE_TYPE_UNSPECIFIED = 0
- DIFF = 1
- RESET = 2
-
- class Checksum(proto.Message):
- r"""The expected state of a client's local database.
- Attributes:
- sha256 (bytes):
- The SHA256 hash of the client state; that is,
- of the sorted list of all hashes present in the
- database.
- """
-
- sha256 = proto.Field(
- proto.BYTES,
- number=1,
- )
-
- response_type = proto.Field(
- proto.ENUM,
- number=4,
- enum=ResponseType,
- )
- additions = proto.Field(
- proto.MESSAGE,
- number=5,
- message='ThreatEntryAdditions',
- )
- removals = proto.Field(
- proto.MESSAGE,
- number=6,
- message='ThreatEntryRemovals',
- )
- new_version_token = proto.Field(
- proto.BYTES,
- number=7,
- )
- checksum = proto.Field(
- proto.MESSAGE,
- number=8,
- message=Checksum,
- )
- recommended_next_diff = proto.Field(
- proto.MESSAGE,
- number=2,
- message=timestamp_pb2.Timestamp,
- )
-
-
-class SearchUrisRequest(proto.Message):
- r"""Request to check URI entries against threatLists.
- Attributes:
- uri (str):
- Required. The URI to be checked for matches.
- threat_types (Sequence[google.cloud.webrisk_v1.types.ThreatType]):
- Required. The ThreatLists to search in.
- Multiple ThreatLists may be specified.
- """
-
- uri = proto.Field(
- proto.STRING,
- number=1,
- )
- threat_types = proto.RepeatedField(
- proto.ENUM,
- number=2,
- enum='ThreatType',
- )
-
-
-class SearchUrisResponse(proto.Message):
- r"""
- Attributes:
- threat (google.cloud.webrisk_v1.types.SearchUrisResponse.ThreatUri):
- The threat list matches. This may be empty if
- the URI is on no list.
- """
-
- class ThreatUri(proto.Message):
- r"""Contains threat information on a matching uri.
- Attributes:
- threat_types (Sequence[google.cloud.webrisk_v1.types.ThreatType]):
- The ThreatList this threat belongs to.
- expire_time (google.protobuf.timestamp_pb2.Timestamp):
- The cache lifetime for the returned match.
- Clients must not cache this response past this
- timestamp to avoid false positives.
- """
-
- threat_types = proto.RepeatedField(
- proto.ENUM,
- number=1,
- enum='ThreatType',
- )
- expire_time = proto.Field(
- proto.MESSAGE,
- number=2,
- message=timestamp_pb2.Timestamp,
- )
-
- threat = proto.Field(
- proto.MESSAGE,
- number=1,
- message=ThreatUri,
- )
-
-
-class SearchHashesRequest(proto.Message):
- r"""Request to return full hashes matched by the provided hash
- prefixes.
-
- Attributes:
- hash_prefix (bytes):
- A hash prefix, consisting of the most
- significant 4-32 bytes of a SHA256 hash. For
- JSON requests, this field is base64-encoded.
- threat_types (Sequence[google.cloud.webrisk_v1.types.ThreatType]):
- Required. The ThreatLists to search in.
- Multiple ThreatLists may be specified.
- """
-
- hash_prefix = proto.Field(
- proto.BYTES,
- number=1,
- )
- threat_types = proto.RepeatedField(
- proto.ENUM,
- number=2,
- enum='ThreatType',
- )
-
-
-class SearchHashesResponse(proto.Message):
- r"""
- Attributes:
- threats (Sequence[google.cloud.webrisk_v1.types.SearchHashesResponse.ThreatHash]):
- The full hashes that matched the requested
- prefixes. The hash will be populated in the key.
- negative_expire_time (google.protobuf.timestamp_pb2.Timestamp):
- For requested entities that did not match the
- threat list, how long to cache the response
- until.
- """
-
- class ThreatHash(proto.Message):
- r"""Contains threat information on a matching hash.
- Attributes:
- threat_types (Sequence[google.cloud.webrisk_v1.types.ThreatType]):
- The ThreatList this threat belongs to.
- This must contain at least one entry.
- hash_ (bytes):
- A 32 byte SHA256 hash. This field is in
- binary format. For JSON requests, hashes are
- base64-encoded.
- expire_time (google.protobuf.timestamp_pb2.Timestamp):
- The cache lifetime for the returned match.
- Clients must not cache this response past this
- timestamp to avoid false positives.
- """
-
- threat_types = proto.RepeatedField(
- proto.ENUM,
- number=1,
- enum='ThreatType',
- )
- hash_ = proto.Field(
- proto.BYTES,
- number=2,
- )
- expire_time = proto.Field(
- proto.MESSAGE,
- number=3,
- message=timestamp_pb2.Timestamp,
- )
-
- threats = proto.RepeatedField(
- proto.MESSAGE,
- number=1,
- message=ThreatHash,
- )
- negative_expire_time = proto.Field(
- proto.MESSAGE,
- number=2,
- message=timestamp_pb2.Timestamp,
- )
-
-
-class ThreatEntryAdditions(proto.Message):
- r"""Contains the set of entries to add to a local database.
- May contain a combination of compressed and raw data in a single
- response.
-
- Attributes:
- raw_hashes (Sequence[google.cloud.webrisk_v1.types.RawHashes]):
- The raw SHA256-formatted entries.
- Repeated to allow returning sets of hashes with
- different prefix sizes.
- rice_hashes (google.cloud.webrisk_v1.types.RiceDeltaEncoding):
- The encoded 4-byte prefixes of SHA256-formatted entries,
- using a Golomb-Rice encoding. The hashes are converted to
- uint32, sorted in ascending order, then delta encoded and
- stored as encoded_data.
- """
-
- raw_hashes = proto.RepeatedField(
- proto.MESSAGE,
- number=1,
- message='RawHashes',
- )
- rice_hashes = proto.Field(
- proto.MESSAGE,
- number=2,
- message='RiceDeltaEncoding',
- )
-
-
-class ThreatEntryRemovals(proto.Message):
- r"""Contains the set of entries to remove from a local database.
- Attributes:
- raw_indices (google.cloud.webrisk_v1.types.RawIndices):
- The raw removal indices for a local list.
- rice_indices (google.cloud.webrisk_v1.types.RiceDeltaEncoding):
- The encoded local, lexicographically-sorted list indices,
- using a Golomb-Rice encoding. Used for sending compressed
- removal indices. The removal indices (uint32) are sorted in
- ascending order, then delta encoded and stored as
- encoded_data.
- """
-
- raw_indices = proto.Field(
- proto.MESSAGE,
- number=1,
- message='RawIndices',
- )
- rice_indices = proto.Field(
- proto.MESSAGE,
- number=2,
- message='RiceDeltaEncoding',
- )
-
-
-class RawIndices(proto.Message):
- r"""A set of raw indices to remove from a local list.
- Attributes:
- indices (Sequence[int]):
- The indices to remove from a
- lexicographically-sorted local list.
- """
-
- indices = proto.RepeatedField(
- proto.INT32,
- number=1,
- )
-
-
-class RawHashes(proto.Message):
- r"""The uncompressed threat entries in hash format.
- Hashes can be anywhere from 4 to 32 bytes in size. A large
- majority are 4 bytes, but some hashes are lengthened if they
- collide with the hash of a popular URI.
-
- Used for sending ThreatEntryAdditons to clients that do not
- support compression, or when sending non-4-byte hashes to
- clients that do support compression.
-
- Attributes:
- prefix_size (int):
- The number of bytes for each prefix encoded
- below. This field can be anywhere from 4
- (shortest prefix) to 32 (full SHA256 hash). In
- practice this is almost always 4, except in
- exceptional circumstances.
- raw_hashes (bytes):
- The hashes, in binary format, concatenated
- into one long string. Hashes are sorted in
- lexicographic order. For JSON API users, hashes
- are base64-encoded.
- """
-
- prefix_size = proto.Field(
- proto.INT32,
- number=1,
- )
- raw_hashes = proto.Field(
- proto.BYTES,
- number=2,
- )
-
-
-class RiceDeltaEncoding(proto.Message):
- r"""The Rice-Golomb encoded data. Used for sending compressed
- 4-byte hashes or compressed removal indices.
-
- Attributes:
- first_value (int):
- The offset of the first entry in the encoded
- data, or, if only a single integer was encoded,
- that single integer's value. If the field is
- empty or missing, assume zero.
- rice_parameter (int):
- The Golomb-Rice parameter, which is a number between 2 and
- 28. This field is missing (that is, zero) if ``num_entries``
- is zero.
- entry_count (int):
- The number of entries that are delta encoded in the encoded
- data. If only a single integer was encoded, this will be
- zero and the single value will be stored in ``first_value``.
- encoded_data (bytes):
- The encoded deltas that are encoded using the
- Golomb-Rice coder.
- """
-
- first_value = proto.Field(
- proto.INT64,
- number=1,
- )
- rice_parameter = proto.Field(
- proto.INT32,
- number=2,
- )
- entry_count = proto.Field(
- proto.INT32,
- number=3,
- )
- encoded_data = proto.Field(
- proto.BYTES,
- number=4,
- )
-
-
-class Submission(proto.Message):
- r"""Wraps a URI that might be displaying phishing content.
- Attributes:
- uri (str):
- Required. The URI that is being reported for
- phishing content to be analyzed.
- """
-
- uri = proto.Field(
- proto.STRING,
- number=1,
- )
-
-
-class CreateSubmissionRequest(proto.Message):
- r"""Request to send a potentially phishy URI to WebRisk.
- Attributes:
- parent (str):
- Required. The name of the project that is making the
- submission. This string is in the format
- "projects/{project_number}".
- submission (google.cloud.webrisk_v1.types.Submission):
- Required. The submission that contains the
- content of the phishing report.
- """
-
- parent = proto.Field(
- proto.STRING,
- number=1,
- )
- submission = proto.Field(
- proto.MESSAGE,
- number=2,
- message='Submission',
- )
-
-
-__all__ = tuple(sorted(__protobuf__.manifest))
diff --git a/owl-bot-staging/v1/mypy.ini b/owl-bot-staging/v1/mypy.ini
deleted file mode 100644
index 4505b48..0000000
--- a/owl-bot-staging/v1/mypy.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[mypy]
-python_version = 3.6
-namespace_packages = True
diff --git a/owl-bot-staging/v1/noxfile.py b/owl-bot-staging/v1/noxfile.py
deleted file mode 100644
index 0b4d2d3..0000000
--- a/owl-bot-staging/v1/noxfile.py
+++ /dev/null
@@ -1,132 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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 pathlib
-import shutil
-import subprocess
-import sys
-
-
-import nox # type: ignore
-
-CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute()
-
-LOWER_BOUND_CONSTRAINTS_FILE = CURRENT_DIRECTORY / "constraints.txt"
-PACKAGE_NAME = subprocess.check_output([sys.executable, "setup.py", "--name"], encoding="utf-8")
-
-
-nox.sessions = [
- "unit",
- "cover",
- "mypy",
- "check_lower_bounds"
- # exclude update_lower_bounds from default
- "docs",
-]
-
-@nox.session(python=['3.6', '3.7', '3.8', '3.9'])
-def unit(session):
- """Run the unit test suite."""
-
- session.install('coverage', 'pytest', 'pytest-cov', 'asyncmock', 'pytest-asyncio')
- session.install('-e', '.')
-
- session.run(
- 'py.test',
- '--quiet',
- '--cov=google/cloud/webrisk_v1/',
- '--cov-config=.coveragerc',
- '--cov-report=term',
- '--cov-report=html',
- os.path.join('tests', 'unit', ''.join(session.posargs))
- )
-
-
-@nox.session(python='3.7')
-def cover(session):
- """Run the final coverage report.
- This outputs the coverage report aggregating coverage from the unit
- test runs (not system test runs), and then erases coverage data.
- """
- session.install("coverage", "pytest-cov")
- session.run("coverage", "report", "--show-missing", "--fail-under=100")
-
- session.run("coverage", "erase")
-
-
-@nox.session(python=['3.6', '3.7'])
-def mypy(session):
- """Run the type checker."""
- session.install('mypy', 'types-pkg_resources')
- session.install('.')
- session.run(
- 'mypy',
- '--explicit-package-bases',
- 'google',
- )
-
-
-@nox.session
-def update_lower_bounds(session):
- """Update lower bounds in constraints.txt to match setup.py"""
- session.install('google-cloud-testutils')
- session.install('.')
-
- session.run(
- 'lower-bound-checker',
- 'update',
- '--package-name',
- PACKAGE_NAME,
- '--constraints-file',
- str(LOWER_BOUND_CONSTRAINTS_FILE),
- )
-
-
-@nox.session
-def check_lower_bounds(session):
- """Check lower bounds in setup.py are reflected in constraints file"""
- session.install('google-cloud-testutils')
- session.install('.')
-
- session.run(
- 'lower-bound-checker',
- 'check',
- '--package-name',
- PACKAGE_NAME,
- '--constraints-file',
- str(LOWER_BOUND_CONSTRAINTS_FILE),
- )
-
-@nox.session(python='3.6')
-def docs(session):
- """Build the docs for this library."""
-
- session.install("-e", ".")
- session.install("sphinx<3.0.0", "alabaster", "recommonmark")
-
- shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True)
- session.run(
- "sphinx-build",
- "-W", # warnings as errors
- "-T", # show full traceback on exception
- "-N", # no colors
- "-b",
- "html",
- "-d",
- os.path.join("docs", "_build", "doctrees", ""),
- os.path.join("docs", ""),
- os.path.join("docs", "_build", "html", ""),
- )
diff --git a/owl-bot-staging/v1/scripts/fixup_webrisk_v1_keywords.py b/owl-bot-staging/v1/scripts/fixup_webrisk_v1_keywords.py
deleted file mode 100644
index db9f1d3..0000000
--- a/owl-bot-staging/v1/scripts/fixup_webrisk_v1_keywords.py
+++ /dev/null
@@ -1,179 +0,0 @@
-#! /usr/bin/env python3
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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 argparse
-import os
-import libcst as cst
-import pathlib
-import sys
-from typing import (Any, Callable, Dict, List, Sequence, Tuple)
-
-
-def partition(
- predicate: Callable[[Any], bool],
- iterator: Sequence[Any]
-) -> Tuple[List[Any], List[Any]]:
- """A stable, out-of-place partition."""
- results = ([], [])
-
- for i in iterator:
- results[int(predicate(i))].append(i)
-
- # Returns trueList, falseList
- return results[1], results[0]
-
-
-class webriskCallTransformer(cst.CSTTransformer):
- CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata')
- METHOD_TO_PARAMS: Dict[str, Tuple[str]] = {
- 'compute_threat_list_diff': ('threat_type', 'constraints', 'version_token', ),
- 'create_submission': ('parent', 'submission', ),
- 'search_hashes': ('threat_types', 'hash_prefix', ),
- 'search_uris': ('uri', 'threat_types', ),
- }
-
- def leave_Call(self, original: cst.Call, updated: cst.Call) -> cst.CSTNode:
- try:
- key = original.func.attr.value
- kword_params = self.METHOD_TO_PARAMS[key]
- except (AttributeError, KeyError):
- # Either not a method from the API or too convoluted to be sure.
- return updated
-
- # If the existing code is valid, keyword args come after positional args.
- # Therefore, all positional args must map to the first parameters.
- args, kwargs = partition(lambda a: not bool(a.keyword), updated.args)
- if any(k.keyword.value == "request" for k in kwargs):
- # We've already fixed this file, don't fix it again.
- return updated
-
- kwargs, ctrl_kwargs = partition(
- lambda a: not a.keyword.value in self.CTRL_PARAMS,
- kwargs
- )
-
- args, ctrl_args = args[:len(kword_params)], args[len(kword_params):]
- ctrl_kwargs.extend(cst.Arg(value=a.value, keyword=cst.Name(value=ctrl))
- for a, ctrl in zip(ctrl_args, self.CTRL_PARAMS))
-
- request_arg = cst.Arg(
- value=cst.Dict([
- cst.DictElement(
- cst.SimpleString("'{}'".format(name)),
-cst.Element(value=arg.value)
- )
- # Note: the args + kwargs looks silly, but keep in mind that
- # the control parameters had to be stripped out, and that
- # those could have been passed positionally or by keyword.
- for name, arg in zip(kword_params, args + kwargs)]),
- keyword=cst.Name("request")
- )
-
- return updated.with_changes(
- args=[request_arg] + ctrl_kwargs
- )
-
-
-def fix_files(
- in_dir: pathlib.Path,
- out_dir: pathlib.Path,
- *,
- transformer=webriskCallTransformer(),
-):
- """Duplicate the input dir to the output dir, fixing file method calls.
-
- Preconditions:
- * in_dir is a real directory
- * out_dir is a real, empty directory
- """
- pyfile_gen = (
- pathlib.Path(os.path.join(root, f))
- for root, _, files in os.walk(in_dir)
- for f in files if os.path.splitext(f)[1] == ".py"
- )
-
- for fpath in pyfile_gen:
- with open(fpath, 'r') as f:
- src = f.read()
-
- # Parse the code and insert method call fixes.
- tree = cst.parse_module(src)
- updated = tree.visit(transformer)
-
- # Create the path and directory structure for the new file.
- updated_path = out_dir.joinpath(fpath.relative_to(in_dir))
- updated_path.parent.mkdir(parents=True, exist_ok=True)
-
- # Generate the updated source file at the corresponding path.
- with open(updated_path, 'w') as f:
- f.write(updated.code)
-
-
-if __name__ == '__main__':
- parser = argparse.ArgumentParser(
- description="""Fix up source that uses the webrisk client library.
-
-The existing sources are NOT overwritten but are copied to output_dir with changes made.
-
-Note: This tool operates at a best-effort level at converting positional
- parameters in client method calls to keyword based parameters.
- Cases where it WILL FAIL include
- A) * or ** expansion in a method call.
- B) Calls via function or method alias (includes free function calls)
- C) Indirect or dispatched calls (e.g. the method is looked up dynamically)
-
- These all constitute false negatives. The tool will also detect false
- positives when an API method shares a name with another method.
-""")
- parser.add_argument(
- '-d',
- '--input-directory',
- required=True,
- dest='input_dir',
- help='the input directory to walk for python files to fix up',
- )
- parser.add_argument(
- '-o',
- '--output-directory',
- required=True,
- dest='output_dir',
- help='the directory to output files fixed via un-flattening',
- )
- args = parser.parse_args()
- input_dir = pathlib.Path(args.input_dir)
- output_dir = pathlib.Path(args.output_dir)
- if not input_dir.is_dir():
- print(
- f"input directory '{input_dir}' does not exist or is not a directory",
- file=sys.stderr,
- )
- sys.exit(-1)
-
- if not output_dir.is_dir():
- print(
- f"output directory '{output_dir}' does not exist or is not a directory",
- file=sys.stderr,
- )
- sys.exit(-1)
-
- if os.listdir(output_dir):
- print(
- f"output directory '{output_dir}' is not empty",
- file=sys.stderr,
- )
- sys.exit(-1)
-
- fix_files(input_dir, output_dir)
diff --git a/owl-bot-staging/v1/setup.py b/owl-bot-staging/v1/setup.py
deleted file mode 100644
index de54b53..0000000
--- a/owl-bot-staging/v1/setup.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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 io
-import os
-import setuptools # type: ignore
-
-version = '0.1.0'
-
-package_root = os.path.abspath(os.path.dirname(__file__))
-
-readme_filename = os.path.join(package_root, 'README.rst')
-with io.open(readme_filename, encoding='utf-8') as readme_file:
- readme = readme_file.read()
-
-setuptools.setup(
- name='google-cloud-webrisk',
- version=version,
- long_description=readme,
- packages=setuptools.PEP420PackageFinder.find(),
- namespace_packages=('google', 'google.cloud'),
- platforms='Posix; MacOS X; Windows',
- include_package_data=True,
- install_requires=(
- 'google-api-core[grpc] >= 1.27.0, < 2.0.0dev',
- 'libcst >= 0.2.5',
- 'proto-plus >= 1.15.0',
- 'packaging >= 14.3', ),
- python_requires='>=3.6',
- classifiers=[
- 'Development Status :: 3 - Alpha',
- 'Intended Audience :: Developers',
- 'Operating System :: OS Independent',
- 'Programming Language :: Python :: 3.6',
- 'Programming Language :: Python :: 3.7',
- 'Programming Language :: Python :: 3.8',
- 'Topic :: Internet',
- 'Topic :: Software Development :: Libraries :: Python Modules',
- ],
- zip_safe=False,
-)
diff --git a/owl-bot-staging/v1/tests/__init__.py b/owl-bot-staging/v1/tests/__init__.py
deleted file mode 100644
index b54a5fc..0000000
--- a/owl-bot-staging/v1/tests/__init__.py
+++ /dev/null
@@ -1,16 +0,0 @@
-
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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/owl-bot-staging/v1/tests/unit/__init__.py b/owl-bot-staging/v1/tests/unit/__init__.py
deleted file mode 100644
index b54a5fc..0000000
--- a/owl-bot-staging/v1/tests/unit/__init__.py
+++ /dev/null
@@ -1,16 +0,0 @@
-
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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/owl-bot-staging/v1/tests/unit/gapic/__init__.py b/owl-bot-staging/v1/tests/unit/gapic/__init__.py
deleted file mode 100644
index b54a5fc..0000000
--- a/owl-bot-staging/v1/tests/unit/gapic/__init__.py
+++ /dev/null
@@ -1,16 +0,0 @@
-
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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/owl-bot-staging/v1/tests/unit/gapic/webrisk_v1/__init__.py b/owl-bot-staging/v1/tests/unit/gapic/webrisk_v1/__init__.py
deleted file mode 100644
index b54a5fc..0000000
--- a/owl-bot-staging/v1/tests/unit/gapic/webrisk_v1/__init__.py
+++ /dev/null
@@ -1,16 +0,0 @@
-
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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/owl-bot-staging/v1/tests/unit/gapic/webrisk_v1/test_web_risk_service.py b/owl-bot-staging/v1/tests/unit/gapic/webrisk_v1/test_web_risk_service.py
deleted file mode 100644
index e0a6152..0000000
--- a/owl-bot-staging/v1/tests/unit/gapic/webrisk_v1/test_web_risk_service.py
+++ /dev/null
@@ -1,1675 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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 mock
-import packaging.version
-
-import grpc
-from grpc.experimental import aio
-import math
-import pytest
-from proto.marshal.rules.dates import DurationRule, TimestampRule
-
-
-from google.api_core import client_options
-from google.api_core import exceptions as core_exceptions
-from google.api_core import gapic_v1
-from google.api_core import grpc_helpers
-from google.api_core import grpc_helpers_async
-from google.auth import credentials as ga_credentials
-from google.auth.exceptions import MutualTLSChannelError
-from google.cloud.webrisk_v1.services.web_risk_service import WebRiskServiceAsyncClient
-from google.cloud.webrisk_v1.services.web_risk_service import WebRiskServiceClient
-from google.cloud.webrisk_v1.services.web_risk_service import transports
-from google.cloud.webrisk_v1.services.web_risk_service.transports.base import _GOOGLE_AUTH_VERSION
-from google.cloud.webrisk_v1.types import webrisk
-from google.oauth2 import service_account
-from google.protobuf import timestamp_pb2 # type: ignore
-import google.auth
-
-
-# TODO(busunkim): Once google-auth >= 1.25.0 is required transitively
-# through google-api-core:
-# - Delete the auth "less than" test cases
-# - Delete these pytest markers (Make the "greater than or equal to" tests the default).
-requires_google_auth_lt_1_25_0 = pytest.mark.skipif(
- packaging.version.parse(_GOOGLE_AUTH_VERSION) >= packaging.version.parse("1.25.0"),
- reason="This test requires google-auth < 1.25.0",
-)
-requires_google_auth_gte_1_25_0 = pytest.mark.skipif(
- packaging.version.parse(_GOOGLE_AUTH_VERSION) < packaging.version.parse("1.25.0"),
- reason="This test requires google-auth >= 1.25.0",
-)
-
-def client_cert_source_callback():
- return b"cert bytes", b"key bytes"
-
-
-# If default endpoint is localhost, then default mtls endpoint will be the same.
-# This method modifies the default endpoint so the client can produce a different
-# mtls endpoint for endpoint testing purposes.
-def modify_default_endpoint(client):
- return "foo.googleapis.com" if ("localhost" in client.DEFAULT_ENDPOINT) else client.DEFAULT_ENDPOINT
-
-
-def test__get_default_mtls_endpoint():
- api_endpoint = "example.googleapis.com"
- api_mtls_endpoint = "example.mtls.googleapis.com"
- sandbox_endpoint = "example.sandbox.googleapis.com"
- sandbox_mtls_endpoint = "example.mtls.sandbox.googleapis.com"
- non_googleapi = "api.example.com"
-
- assert WebRiskServiceClient._get_default_mtls_endpoint(None) is None
- assert WebRiskServiceClient._get_default_mtls_endpoint(api_endpoint) == api_mtls_endpoint
- assert WebRiskServiceClient._get_default_mtls_endpoint(api_mtls_endpoint) == api_mtls_endpoint
- assert WebRiskServiceClient._get_default_mtls_endpoint(sandbox_endpoint) == sandbox_mtls_endpoint
- assert WebRiskServiceClient._get_default_mtls_endpoint(sandbox_mtls_endpoint) == sandbox_mtls_endpoint
- assert WebRiskServiceClient._get_default_mtls_endpoint(non_googleapi) == non_googleapi
-
-
-@pytest.mark.parametrize("client_class", [
- WebRiskServiceClient,
- WebRiskServiceAsyncClient,
-])
-def test_web_risk_service_client_from_service_account_info(client_class):
- creds = ga_credentials.AnonymousCredentials()
- with mock.patch.object(service_account.Credentials, 'from_service_account_info') as factory:
- factory.return_value = creds
- info = {"valid": True}
- client = client_class.from_service_account_info(info)
- assert client.transport._credentials == creds
- assert isinstance(client, client_class)
-
- assert client.transport._host == 'webrisk.googleapis.com:443'
-
-
-@pytest.mark.parametrize("client_class", [
- WebRiskServiceClient,
- WebRiskServiceAsyncClient,
-])
-def test_web_risk_service_client_service_account_always_use_jwt(client_class):
- with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt:
- creds = service_account.Credentials(None, None, None)
- client = client_class(credentials=creds)
- use_jwt.assert_not_called()
-
-
-@pytest.mark.parametrize("transport_class,transport_name", [
- (transports.WebRiskServiceGrpcTransport, "grpc"),
- (transports.WebRiskServiceGrpcAsyncIOTransport, "grpc_asyncio"),
-])
-def test_web_risk_service_client_service_account_always_use_jwt_true(transport_class, transport_name):
- with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt:
- creds = service_account.Credentials(None, None, None)
- transport = transport_class(credentials=creds, always_use_jwt_access=True)
- use_jwt.assert_called_once_with(True)
-
-
-@pytest.mark.parametrize("client_class", [
- WebRiskServiceClient,
- WebRiskServiceAsyncClient,
-])
-def test_web_risk_service_client_from_service_account_file(client_class):
- creds = ga_credentials.AnonymousCredentials()
- with mock.patch.object(service_account.Credentials, 'from_service_account_file') as factory:
- factory.return_value = creds
- client = client_class.from_service_account_file("dummy/file/path.json")
- assert client.transport._credentials == creds
- assert isinstance(client, client_class)
-
- client = client_class.from_service_account_json("dummy/file/path.json")
- assert client.transport._credentials == creds
- assert isinstance(client, client_class)
-
- assert client.transport._host == 'webrisk.googleapis.com:443'
-
-
-def test_web_risk_service_client_get_transport_class():
- transport = WebRiskServiceClient.get_transport_class()
- available_transports = [
- transports.WebRiskServiceGrpcTransport,
- ]
- assert transport in available_transports
-
- transport = WebRiskServiceClient.get_transport_class("grpc")
- assert transport == transports.WebRiskServiceGrpcTransport
-
-
-@pytest.mark.parametrize("client_class,transport_class,transport_name", [
- (WebRiskServiceClient, transports.WebRiskServiceGrpcTransport, "grpc"),
- (WebRiskServiceAsyncClient, transports.WebRiskServiceGrpcAsyncIOTransport, "grpc_asyncio"),
-])
-@mock.patch.object(WebRiskServiceClient, "DEFAULT_ENDPOINT", modify_default_endpoint(WebRiskServiceClient))
-@mock.patch.object(WebRiskServiceAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(WebRiskServiceAsyncClient))
-def test_web_risk_service_client_client_options(client_class, transport_class, transport_name):
- # Check that if channel is provided we won't create a new one.
- with mock.patch.object(WebRiskServiceClient, 'get_transport_class') as gtc:
- transport = transport_class(
- credentials=ga_credentials.AnonymousCredentials()
- )
- client = client_class(transport=transport)
- gtc.assert_not_called()
-
- # Check that if channel is provided via str we will create a new one.
- with mock.patch.object(WebRiskServiceClient, 'get_transport_class') as gtc:
- client = client_class(transport=transport_name)
- gtc.assert_called()
-
- # Check the case api_endpoint is provided.
- options = client_options.ClientOptions(api_endpoint="squid.clam.whelk")
- with mock.patch.object(transport_class, '__init__') as patched:
- patched.return_value = None
- client = client_class(client_options=options)
- patched.assert_called_once_with(
- credentials=None,
- credentials_file=None,
- host="squid.clam.whelk",
- scopes=None,
- client_cert_source_for_mtls=None,
- quota_project_id=None,
- client_info=transports.base.DEFAULT_CLIENT_INFO,
- )
-
- # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is
- # "never".
- with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}):
- with mock.patch.object(transport_class, '__init__') as patched:
- patched.return_value = None
- client = client_class()
- patched.assert_called_once_with(
- credentials=None,
- credentials_file=None,
- host=client.DEFAULT_ENDPOINT,
- scopes=None,
- client_cert_source_for_mtls=None,
- quota_project_id=None,
- client_info=transports.base.DEFAULT_CLIENT_INFO,
- )
-
- # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is
- # "always".
- with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}):
- with mock.patch.object(transport_class, '__init__') as patched:
- patched.return_value = None
- client = client_class()
- patched.assert_called_once_with(
- credentials=None,
- credentials_file=None,
- host=client.DEFAULT_MTLS_ENDPOINT,
- scopes=None,
- client_cert_source_for_mtls=None,
- quota_project_id=None,
- client_info=transports.base.DEFAULT_CLIENT_INFO,
- )
-
- # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has
- # unsupported value.
- with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}):
- with pytest.raises(MutualTLSChannelError):
- client = client_class()
-
- # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value.
- with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"}):
- with pytest.raises(ValueError):
- client = client_class()
-
- # Check the case quota_project_id is provided
- options = client_options.ClientOptions(quota_project_id="octopus")
- with mock.patch.object(transport_class, '__init__') as patched:
- patched.return_value = None
- client = client_class(client_options=options)
- patched.assert_called_once_with(
- credentials=None,
- credentials_file=None,
- host=client.DEFAULT_ENDPOINT,
- scopes=None,
- client_cert_source_for_mtls=None,
- quota_project_id="octopus",
- client_info=transports.base.DEFAULT_CLIENT_INFO,
- )
-
-@pytest.mark.parametrize("client_class,transport_class,transport_name,use_client_cert_env", [
- (WebRiskServiceClient, transports.WebRiskServiceGrpcTransport, "grpc", "true"),
- (WebRiskServiceAsyncClient, transports.WebRiskServiceGrpcAsyncIOTransport, "grpc_asyncio", "true"),
- (WebRiskServiceClient, transports.WebRiskServiceGrpcTransport, "grpc", "false"),
- (WebRiskServiceAsyncClient, transports.WebRiskServiceGrpcAsyncIOTransport, "grpc_asyncio", "false"),
-])
-@mock.patch.object(WebRiskServiceClient, "DEFAULT_ENDPOINT", modify_default_endpoint(WebRiskServiceClient))
-@mock.patch.object(WebRiskServiceAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(WebRiskServiceAsyncClient))
-@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"})
-def test_web_risk_service_client_mtls_env_auto(client_class, transport_class, transport_name, use_client_cert_env):
- # This tests the endpoint autoswitch behavior. Endpoint is autoswitched to the default
- # mtls endpoint, if GOOGLE_API_USE_CLIENT_CERTIFICATE is "true" and client cert exists.
-
- # Check the case client_cert_source is provided. Whether client cert is used depends on
- # GOOGLE_API_USE_CLIENT_CERTIFICATE value.
- with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}):
- options = client_options.ClientOptions(client_cert_source=client_cert_source_callback)
- with mock.patch.object(transport_class, '__init__') as patched:
- patched.return_value = None
- client = client_class(client_options=options)
-
- if use_client_cert_env == "false":
- expected_client_cert_source = None
- expected_host = client.DEFAULT_ENDPOINT
- else:
- expected_client_cert_source = client_cert_source_callback
- expected_host = client.DEFAULT_MTLS_ENDPOINT
-
- patched.assert_called_once_with(
- credentials=None,
- credentials_file=None,
- host=expected_host,
- scopes=None,
- client_cert_source_for_mtls=expected_client_cert_source,
- quota_project_id=None,
- client_info=transports.base.DEFAULT_CLIENT_INFO,
- )
-
- # Check the case ADC client cert is provided. Whether client cert is used depends on
- # GOOGLE_API_USE_CLIENT_CERTIFICATE value.
- with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}):
- with mock.patch.object(transport_class, '__init__') as patched:
- with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=True):
- with mock.patch('google.auth.transport.mtls.default_client_cert_source', return_value=client_cert_source_callback):
- if use_client_cert_env == "false":
- expected_host = client.DEFAULT_ENDPOINT
- expected_client_cert_source = None
- else:
- expected_host = client.DEFAULT_MTLS_ENDPOINT
- expected_client_cert_source = client_cert_source_callback
-
- patched.return_value = None
- client = client_class()
- patched.assert_called_once_with(
- credentials=None,
- credentials_file=None,
- host=expected_host,
- scopes=None,
- client_cert_source_for_mtls=expected_client_cert_source,
- quota_project_id=None,
- client_info=transports.base.DEFAULT_CLIENT_INFO,
- )
-
- # Check the case client_cert_source and ADC client cert are not provided.
- with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}):
- with mock.patch.object(transport_class, '__init__') as patched:
- with mock.patch("google.auth.transport.mtls.has_default_client_cert_source", return_value=False):
- patched.return_value = None
- client = client_class()
- patched.assert_called_once_with(
- credentials=None,
- credentials_file=None,
- host=client.DEFAULT_ENDPOINT,
- scopes=None,
- client_cert_source_for_mtls=None,
- quota_project_id=None,
- client_info=transports.base.DEFAULT_CLIENT_INFO,
- )
-
-
-@pytest.mark.parametrize("client_class,transport_class,transport_name", [
- (WebRiskServiceClient, transports.WebRiskServiceGrpcTransport, "grpc"),
- (WebRiskServiceAsyncClient, transports.WebRiskServiceGrpcAsyncIOTransport, "grpc_asyncio"),
-])
-def test_web_risk_service_client_client_options_scopes(client_class, transport_class, transport_name):
- # Check the case scopes are provided.
- options = client_options.ClientOptions(
- scopes=["1", "2"],
- )
- with mock.patch.object(transport_class, '__init__') as patched:
- patched.return_value = None
- client = client_class(client_options=options)
- patched.assert_called_once_with(
- credentials=None,
- credentials_file=None,
- host=client.DEFAULT_ENDPOINT,
- scopes=["1", "2"],
- client_cert_source_for_mtls=None,
- quota_project_id=None,
- client_info=transports.base.DEFAULT_CLIENT_INFO,
- )
-
-@pytest.mark.parametrize("client_class,transport_class,transport_name", [
- (WebRiskServiceClient, transports.WebRiskServiceGrpcTransport, "grpc"),
- (WebRiskServiceAsyncClient, transports.WebRiskServiceGrpcAsyncIOTransport, "grpc_asyncio"),
-])
-def test_web_risk_service_client_client_options_credentials_file(client_class, transport_class, transport_name):
- # Check the case credentials file is provided.
- options = client_options.ClientOptions(
- credentials_file="credentials.json"
- )
- with mock.patch.object(transport_class, '__init__') as patched:
- patched.return_value = None
- client = client_class(client_options=options)
- patched.assert_called_once_with(
- credentials=None,
- credentials_file="credentials.json",
- host=client.DEFAULT_ENDPOINT,
- scopes=None,
- client_cert_source_for_mtls=None,
- quota_project_id=None,
- client_info=transports.base.DEFAULT_CLIENT_INFO,
- )
-
-
-def test_web_risk_service_client_client_options_from_dict():
- with mock.patch('google.cloud.webrisk_v1.services.web_risk_service.transports.WebRiskServiceGrpcTransport.__init__') as grpc_transport:
- grpc_transport.return_value = None
- client = WebRiskServiceClient(
- client_options={'api_endpoint': 'squid.clam.whelk'}
- )
- grpc_transport.assert_called_once_with(
- credentials=None,
- credentials_file=None,
- host="squid.clam.whelk",
- scopes=None,
- client_cert_source_for_mtls=None,
- quota_project_id=None,
- client_info=transports.base.DEFAULT_CLIENT_INFO,
- )
-
-
-def test_compute_threat_list_diff(transport: str = 'grpc', request_type=webrisk.ComputeThreatListDiffRequest):
- client = WebRiskServiceClient(
- credentials=ga_credentials.AnonymousCredentials(),
- transport=transport,
- )
-
- # Everything is optional in proto3 as far as the runtime is concerned,
- # and we are mocking out the actual API, so just send an empty request.
- request = request_type()
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.compute_threat_list_diff),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value = webrisk.ComputeThreatListDiffResponse(
- response_type=webrisk.ComputeThreatListDiffResponse.ResponseType.DIFF,
- new_version_token=b'new_version_token_blob',
- )
- response = client.compute_threat_list_diff(request)
-
- # Establish that the underlying gRPC stub method was called.
- assert len(call.mock_calls) == 1
- _, args, _ = call.mock_calls[0]
- assert args[0] == webrisk.ComputeThreatListDiffRequest()
-
- # Establish that the response is the type that we expect.
- assert isinstance(response, webrisk.ComputeThreatListDiffResponse)
- assert response.response_type == webrisk.ComputeThreatListDiffResponse.ResponseType.DIFF
- assert response.new_version_token == b'new_version_token_blob'
-
-
-def test_compute_threat_list_diff_from_dict():
- test_compute_threat_list_diff(request_type=dict)
-
-
-def test_compute_threat_list_diff_empty_call():
- # This test is a coverage failsafe to make sure that totally empty calls,
- # i.e. request == None and no flattened fields passed, work.
- client = WebRiskServiceClient(
- credentials=ga_credentials.AnonymousCredentials(),
- transport='grpc',
- )
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.compute_threat_list_diff),
- '__call__') as call:
- client.compute_threat_list_diff()
- call.assert_called()
- _, args, _ = call.mock_calls[0]
- assert args[0] == webrisk.ComputeThreatListDiffRequest()
-
-
-@pytest.mark.asyncio
-async def test_compute_threat_list_diff_async(transport: str = 'grpc_asyncio', request_type=webrisk.ComputeThreatListDiffRequest):
- client = WebRiskServiceAsyncClient(
- credentials=ga_credentials.AnonymousCredentials(),
- transport=transport,
- )
-
- # Everything is optional in proto3 as far as the runtime is concerned,
- # and we are mocking out the actual API, so just send an empty request.
- request = request_type()
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.compute_threat_list_diff),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(webrisk.ComputeThreatListDiffResponse(
- response_type=webrisk.ComputeThreatListDiffResponse.ResponseType.DIFF,
- new_version_token=b'new_version_token_blob',
- ))
- response = await client.compute_threat_list_diff(request)
-
- # Establish that the underlying gRPC stub method was called.
- assert len(call.mock_calls)
- _, args, _ = call.mock_calls[0]
- assert args[0] == webrisk.ComputeThreatListDiffRequest()
-
- # Establish that the response is the type that we expect.
- assert isinstance(response, webrisk.ComputeThreatListDiffResponse)
- assert response.response_type == webrisk.ComputeThreatListDiffResponse.ResponseType.DIFF
- assert response.new_version_token == b'new_version_token_blob'
-
-
-@pytest.mark.asyncio
-async def test_compute_threat_list_diff_async_from_dict():
- await test_compute_threat_list_diff_async(request_type=dict)
-
-
-def test_compute_threat_list_diff_flattened():
- client = WebRiskServiceClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.compute_threat_list_diff),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value = webrisk.ComputeThreatListDiffResponse()
- # Call the method with a truthy value for each flattened field,
- # using the keyword arguments to the method.
- client.compute_threat_list_diff(
- threat_type=webrisk.ThreatType.MALWARE,
- version_token=b'version_token_blob',
- constraints=webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687),
- )
-
- # Establish that the underlying call was made with the expected
- # request object values.
- assert len(call.mock_calls) == 1
- _, args, _ = call.mock_calls[0]
- assert args[0].threat_type == webrisk.ThreatType.MALWARE
- assert args[0].version_token == b'version_token_blob'
- assert args[0].constraints == webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687)
-
-
-def test_compute_threat_list_diff_flattened_error():
- client = WebRiskServiceClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Attempting to call a method with both a request object and flattened
- # fields is an error.
- with pytest.raises(ValueError):
- client.compute_threat_list_diff(
- webrisk.ComputeThreatListDiffRequest(),
- threat_type=webrisk.ThreatType.MALWARE,
- version_token=b'version_token_blob',
- constraints=webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687),
- )
-
-
-@pytest.mark.asyncio
-async def test_compute_threat_list_diff_flattened_async():
- client = WebRiskServiceAsyncClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.compute_threat_list_diff),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value = webrisk.ComputeThreatListDiffResponse()
-
- call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(webrisk.ComputeThreatListDiffResponse())
- # Call the method with a truthy value for each flattened field,
- # using the keyword arguments to the method.
- response = await client.compute_threat_list_diff(
- threat_type=webrisk.ThreatType.MALWARE,
- version_token=b'version_token_blob',
- constraints=webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687),
- )
-
- # Establish that the underlying call was made with the expected
- # request object values.
- assert len(call.mock_calls)
- _, args, _ = call.mock_calls[0]
- assert args[0].threat_type == webrisk.ThreatType.MALWARE
- assert args[0].version_token == b'version_token_blob'
- assert args[0].constraints == webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687)
-
-
-@pytest.mark.asyncio
-async def test_compute_threat_list_diff_flattened_error_async():
- client = WebRiskServiceAsyncClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Attempting to call a method with both a request object and flattened
- # fields is an error.
- with pytest.raises(ValueError):
- await client.compute_threat_list_diff(
- webrisk.ComputeThreatListDiffRequest(),
- threat_type=webrisk.ThreatType.MALWARE,
- version_token=b'version_token_blob',
- constraints=webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687),
- )
-
-
-def test_search_uris(transport: str = 'grpc', request_type=webrisk.SearchUrisRequest):
- client = WebRiskServiceClient(
- credentials=ga_credentials.AnonymousCredentials(),
- transport=transport,
- )
-
- # Everything is optional in proto3 as far as the runtime is concerned,
- # and we are mocking out the actual API, so just send an empty request.
- request = request_type()
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.search_uris),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value = webrisk.SearchUrisResponse(
- )
- response = client.search_uris(request)
-
- # Establish that the underlying gRPC stub method was called.
- assert len(call.mock_calls) == 1
- _, args, _ = call.mock_calls[0]
- assert args[0] == webrisk.SearchUrisRequest()
-
- # Establish that the response is the type that we expect.
- assert isinstance(response, webrisk.SearchUrisResponse)
-
-
-def test_search_uris_from_dict():
- test_search_uris(request_type=dict)
-
-
-def test_search_uris_empty_call():
- # This test is a coverage failsafe to make sure that totally empty calls,
- # i.e. request == None and no flattened fields passed, work.
- client = WebRiskServiceClient(
- credentials=ga_credentials.AnonymousCredentials(),
- transport='grpc',
- )
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.search_uris),
- '__call__') as call:
- client.search_uris()
- call.assert_called()
- _, args, _ = call.mock_calls[0]
- assert args[0] == webrisk.SearchUrisRequest()
-
-
-@pytest.mark.asyncio
-async def test_search_uris_async(transport: str = 'grpc_asyncio', request_type=webrisk.SearchUrisRequest):
- client = WebRiskServiceAsyncClient(
- credentials=ga_credentials.AnonymousCredentials(),
- transport=transport,
- )
-
- # Everything is optional in proto3 as far as the runtime is concerned,
- # and we are mocking out the actual API, so just send an empty request.
- request = request_type()
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.search_uris),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(webrisk.SearchUrisResponse(
- ))
- response = await client.search_uris(request)
-
- # Establish that the underlying gRPC stub method was called.
- assert len(call.mock_calls)
- _, args, _ = call.mock_calls[0]
- assert args[0] == webrisk.SearchUrisRequest()
-
- # Establish that the response is the type that we expect.
- assert isinstance(response, webrisk.SearchUrisResponse)
-
-
-@pytest.mark.asyncio
-async def test_search_uris_async_from_dict():
- await test_search_uris_async(request_type=dict)
-
-
-def test_search_uris_flattened():
- client = WebRiskServiceClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.search_uris),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value = webrisk.SearchUrisResponse()
- # Call the method with a truthy value for each flattened field,
- # using the keyword arguments to the method.
- client.search_uris(
- uri='uri_value',
- threat_types=[webrisk.ThreatType.MALWARE],
- )
-
- # Establish that the underlying call was made with the expected
- # request object values.
- assert len(call.mock_calls) == 1
- _, args, _ = call.mock_calls[0]
- assert args[0].uri == 'uri_value'
- assert args[0].threat_types == [webrisk.ThreatType.MALWARE]
-
-
-def test_search_uris_flattened_error():
- client = WebRiskServiceClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Attempting to call a method with both a request object and flattened
- # fields is an error.
- with pytest.raises(ValueError):
- client.search_uris(
- webrisk.SearchUrisRequest(),
- uri='uri_value',
- threat_types=[webrisk.ThreatType.MALWARE],
- )
-
-
-@pytest.mark.asyncio
-async def test_search_uris_flattened_async():
- client = WebRiskServiceAsyncClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.search_uris),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value = webrisk.SearchUrisResponse()
-
- call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(webrisk.SearchUrisResponse())
- # Call the method with a truthy value for each flattened field,
- # using the keyword arguments to the method.
- response = await client.search_uris(
- uri='uri_value',
- threat_types=[webrisk.ThreatType.MALWARE],
- )
-
- # Establish that the underlying call was made with the expected
- # request object values.
- assert len(call.mock_calls)
- _, args, _ = call.mock_calls[0]
- assert args[0].uri == 'uri_value'
- assert args[0].threat_types == [webrisk.ThreatType.MALWARE]
-
-
-@pytest.mark.asyncio
-async def test_search_uris_flattened_error_async():
- client = WebRiskServiceAsyncClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Attempting to call a method with both a request object and flattened
- # fields is an error.
- with pytest.raises(ValueError):
- await client.search_uris(
- webrisk.SearchUrisRequest(),
- uri='uri_value',
- threat_types=[webrisk.ThreatType.MALWARE],
- )
-
-
-def test_search_hashes(transport: str = 'grpc', request_type=webrisk.SearchHashesRequest):
- client = WebRiskServiceClient(
- credentials=ga_credentials.AnonymousCredentials(),
- transport=transport,
- )
-
- # Everything is optional in proto3 as far as the runtime is concerned,
- # and we are mocking out the actual API, so just send an empty request.
- request = request_type()
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.search_hashes),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value = webrisk.SearchHashesResponse(
- )
- response = client.search_hashes(request)
-
- # Establish that the underlying gRPC stub method was called.
- assert len(call.mock_calls) == 1
- _, args, _ = call.mock_calls[0]
- assert args[0] == webrisk.SearchHashesRequest()
-
- # Establish that the response is the type that we expect.
- assert isinstance(response, webrisk.SearchHashesResponse)
-
-
-def test_search_hashes_from_dict():
- test_search_hashes(request_type=dict)
-
-
-def test_search_hashes_empty_call():
- # This test is a coverage failsafe to make sure that totally empty calls,
- # i.e. request == None and no flattened fields passed, work.
- client = WebRiskServiceClient(
- credentials=ga_credentials.AnonymousCredentials(),
- transport='grpc',
- )
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.search_hashes),
- '__call__') as call:
- client.search_hashes()
- call.assert_called()
- _, args, _ = call.mock_calls[0]
- assert args[0] == webrisk.SearchHashesRequest()
-
-
-@pytest.mark.asyncio
-async def test_search_hashes_async(transport: str = 'grpc_asyncio', request_type=webrisk.SearchHashesRequest):
- client = WebRiskServiceAsyncClient(
- credentials=ga_credentials.AnonymousCredentials(),
- transport=transport,
- )
-
- # Everything is optional in proto3 as far as the runtime is concerned,
- # and we are mocking out the actual API, so just send an empty request.
- request = request_type()
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.search_hashes),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(webrisk.SearchHashesResponse(
- ))
- response = await client.search_hashes(request)
-
- # Establish that the underlying gRPC stub method was called.
- assert len(call.mock_calls)
- _, args, _ = call.mock_calls[0]
- assert args[0] == webrisk.SearchHashesRequest()
-
- # Establish that the response is the type that we expect.
- assert isinstance(response, webrisk.SearchHashesResponse)
-
-
-@pytest.mark.asyncio
-async def test_search_hashes_async_from_dict():
- await test_search_hashes_async(request_type=dict)
-
-
-def test_search_hashes_flattened():
- client = WebRiskServiceClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.search_hashes),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value = webrisk.SearchHashesResponse()
- # Call the method with a truthy value for each flattened field,
- # using the keyword arguments to the method.
- client.search_hashes(
- hash_prefix=b'hash_prefix_blob',
- threat_types=[webrisk.ThreatType.MALWARE],
- )
-
- # Establish that the underlying call was made with the expected
- # request object values.
- assert len(call.mock_calls) == 1
- _, args, _ = call.mock_calls[0]
- assert args[0].hash_prefix == b'hash_prefix_blob'
- assert args[0].threat_types == [webrisk.ThreatType.MALWARE]
-
-
-def test_search_hashes_flattened_error():
- client = WebRiskServiceClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Attempting to call a method with both a request object and flattened
- # fields is an error.
- with pytest.raises(ValueError):
- client.search_hashes(
- webrisk.SearchHashesRequest(),
- hash_prefix=b'hash_prefix_blob',
- threat_types=[webrisk.ThreatType.MALWARE],
- )
-
-
-@pytest.mark.asyncio
-async def test_search_hashes_flattened_async():
- client = WebRiskServiceAsyncClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.search_hashes),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value = webrisk.SearchHashesResponse()
-
- call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(webrisk.SearchHashesResponse())
- # Call the method with a truthy value for each flattened field,
- # using the keyword arguments to the method.
- response = await client.search_hashes(
- hash_prefix=b'hash_prefix_blob',
- threat_types=[webrisk.ThreatType.MALWARE],
- )
-
- # Establish that the underlying call was made with the expected
- # request object values.
- assert len(call.mock_calls)
- _, args, _ = call.mock_calls[0]
- assert args[0].hash_prefix == b'hash_prefix_blob'
- assert args[0].threat_types == [webrisk.ThreatType.MALWARE]
-
-
-@pytest.mark.asyncio
-async def test_search_hashes_flattened_error_async():
- client = WebRiskServiceAsyncClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Attempting to call a method with both a request object and flattened
- # fields is an error.
- with pytest.raises(ValueError):
- await client.search_hashes(
- webrisk.SearchHashesRequest(),
- hash_prefix=b'hash_prefix_blob',
- threat_types=[webrisk.ThreatType.MALWARE],
- )
-
-
-def test_create_submission(transport: str = 'grpc', request_type=webrisk.CreateSubmissionRequest):
- client = WebRiskServiceClient(
- credentials=ga_credentials.AnonymousCredentials(),
- transport=transport,
- )
-
- # Everything is optional in proto3 as far as the runtime is concerned,
- # and we are mocking out the actual API, so just send an empty request.
- request = request_type()
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.create_submission),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value = webrisk.Submission(
- uri='uri_value',
- )
- response = client.create_submission(request)
-
- # Establish that the underlying gRPC stub method was called.
- assert len(call.mock_calls) == 1
- _, args, _ = call.mock_calls[0]
- assert args[0] == webrisk.CreateSubmissionRequest()
-
- # Establish that the response is the type that we expect.
- assert isinstance(response, webrisk.Submission)
- assert response.uri == 'uri_value'
-
-
-def test_create_submission_from_dict():
- test_create_submission(request_type=dict)
-
-
-def test_create_submission_empty_call():
- # This test is a coverage failsafe to make sure that totally empty calls,
- # i.e. request == None and no flattened fields passed, work.
- client = WebRiskServiceClient(
- credentials=ga_credentials.AnonymousCredentials(),
- transport='grpc',
- )
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.create_submission),
- '__call__') as call:
- client.create_submission()
- call.assert_called()
- _, args, _ = call.mock_calls[0]
- assert args[0] == webrisk.CreateSubmissionRequest()
-
-
-@pytest.mark.asyncio
-async def test_create_submission_async(transport: str = 'grpc_asyncio', request_type=webrisk.CreateSubmissionRequest):
- client = WebRiskServiceAsyncClient(
- credentials=ga_credentials.AnonymousCredentials(),
- transport=transport,
- )
-
- # Everything is optional in proto3 as far as the runtime is concerned,
- # and we are mocking out the actual API, so just send an empty request.
- request = request_type()
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.create_submission),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(webrisk.Submission(
- uri='uri_value',
- ))
- response = await client.create_submission(request)
-
- # Establish that the underlying gRPC stub method was called.
- assert len(call.mock_calls)
- _, args, _ = call.mock_calls[0]
- assert args[0] == webrisk.CreateSubmissionRequest()
-
- # Establish that the response is the type that we expect.
- assert isinstance(response, webrisk.Submission)
- assert response.uri == 'uri_value'
-
-
-@pytest.mark.asyncio
-async def test_create_submission_async_from_dict():
- await test_create_submission_async(request_type=dict)
-
-
-def test_create_submission_field_headers():
- client = WebRiskServiceClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Any value that is part of the HTTP/1.1 URI should be sent as
- # a field header. Set these to a non-empty value.
- request = webrisk.CreateSubmissionRequest()
-
- request.parent = 'parent/value'
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.create_submission),
- '__call__') as call:
- call.return_value = webrisk.Submission()
- client.create_submission(request)
-
- # Establish that the underlying gRPC stub method was called.
- assert len(call.mock_calls) == 1
- _, args, _ = call.mock_calls[0]
- assert args[0] == request
-
- # Establish that the field header was sent.
- _, _, kw = call.mock_calls[0]
- assert (
- 'x-goog-request-params',
- 'parent=parent/value',
- ) in kw['metadata']
-
-
-@pytest.mark.asyncio
-async def test_create_submission_field_headers_async():
- client = WebRiskServiceAsyncClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Any value that is part of the HTTP/1.1 URI should be sent as
- # a field header. Set these to a non-empty value.
- request = webrisk.CreateSubmissionRequest()
-
- request.parent = 'parent/value'
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.create_submission),
- '__call__') as call:
- call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(webrisk.Submission())
- await client.create_submission(request)
-
- # Establish that the underlying gRPC stub method was called.
- assert len(call.mock_calls)
- _, args, _ = call.mock_calls[0]
- assert args[0] == request
-
- # Establish that the field header was sent.
- _, _, kw = call.mock_calls[0]
- assert (
- 'x-goog-request-params',
- 'parent=parent/value',
- ) in kw['metadata']
-
-
-def test_create_submission_flattened():
- client = WebRiskServiceClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.create_submission),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value = webrisk.Submission()
- # Call the method with a truthy value for each flattened field,
- # using the keyword arguments to the method.
- client.create_submission(
- parent='parent_value',
- submission=webrisk.Submission(uri='uri_value'),
- )
-
- # Establish that the underlying call was made with the expected
- # request object values.
- assert len(call.mock_calls) == 1
- _, args, _ = call.mock_calls[0]
- assert args[0].parent == 'parent_value'
- assert args[0].submission == webrisk.Submission(uri='uri_value')
-
-
-def test_create_submission_flattened_error():
- client = WebRiskServiceClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Attempting to call a method with both a request object and flattened
- # fields is an error.
- with pytest.raises(ValueError):
- client.create_submission(
- webrisk.CreateSubmissionRequest(),
- parent='parent_value',
- submission=webrisk.Submission(uri='uri_value'),
- )
-
-
-@pytest.mark.asyncio
-async def test_create_submission_flattened_async():
- client = WebRiskServiceAsyncClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.create_submission),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value = webrisk.Submission()
-
- call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(webrisk.Submission())
- # Call the method with a truthy value for each flattened field,
- # using the keyword arguments to the method.
- response = await client.create_submission(
- parent='parent_value',
- submission=webrisk.Submission(uri='uri_value'),
- )
-
- # Establish that the underlying call was made with the expected
- # request object values.
- assert len(call.mock_calls)
- _, args, _ = call.mock_calls[0]
- assert args[0].parent == 'parent_value'
- assert args[0].submission == webrisk.Submission(uri='uri_value')
-
-
-@pytest.mark.asyncio
-async def test_create_submission_flattened_error_async():
- client = WebRiskServiceAsyncClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Attempting to call a method with both a request object and flattened
- # fields is an error.
- with pytest.raises(ValueError):
- await client.create_submission(
- webrisk.CreateSubmissionRequest(),
- parent='parent_value',
- submission=webrisk.Submission(uri='uri_value'),
- )
-
-
-def test_credentials_transport_error():
- # It is an error to provide credentials and a transport instance.
- transport = transports.WebRiskServiceGrpcTransport(
- credentials=ga_credentials.AnonymousCredentials(),
- )
- with pytest.raises(ValueError):
- client = WebRiskServiceClient(
- credentials=ga_credentials.AnonymousCredentials(),
- transport=transport,
- )
-
- # It is an error to provide a credentials file and a transport instance.
- transport = transports.WebRiskServiceGrpcTransport(
- credentials=ga_credentials.AnonymousCredentials(),
- )
- with pytest.raises(ValueError):
- client = WebRiskServiceClient(
- client_options={"credentials_file": "credentials.json"},
- transport=transport,
- )
-
- # It is an error to provide scopes and a transport instance.
- transport = transports.WebRiskServiceGrpcTransport(
- credentials=ga_credentials.AnonymousCredentials(),
- )
- with pytest.raises(ValueError):
- client = WebRiskServiceClient(
- client_options={"scopes": ["1", "2"]},
- transport=transport,
- )
-
-
-def test_transport_instance():
- # A client may be instantiated with a custom transport instance.
- transport = transports.WebRiskServiceGrpcTransport(
- credentials=ga_credentials.AnonymousCredentials(),
- )
- client = WebRiskServiceClient(transport=transport)
- assert client.transport is transport
-
-def test_transport_get_channel():
- # A client may be instantiated with a custom transport instance.
- transport = transports.WebRiskServiceGrpcTransport(
- credentials=ga_credentials.AnonymousCredentials(),
- )
- channel = transport.grpc_channel
- assert channel
-
- transport = transports.WebRiskServiceGrpcAsyncIOTransport(
- credentials=ga_credentials.AnonymousCredentials(),
- )
- channel = transport.grpc_channel
- assert channel
-
-@pytest.mark.parametrize("transport_class", [
- transports.WebRiskServiceGrpcTransport,
- transports.WebRiskServiceGrpcAsyncIOTransport,
-])
-def test_transport_adc(transport_class):
- # Test default credentials are used if not provided.
- with mock.patch.object(google.auth, 'default') as adc:
- adc.return_value = (ga_credentials.AnonymousCredentials(), None)
- transport_class()
- adc.assert_called_once()
-
-def test_transport_grpc_default():
- # A client should use the gRPC transport by default.
- client = WebRiskServiceClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
- assert isinstance(
- client.transport,
- transports.WebRiskServiceGrpcTransport,
- )
-
-def test_web_risk_service_base_transport_error():
- # Passing both a credentials object and credentials_file should raise an error
- with pytest.raises(core_exceptions.DuplicateCredentialArgs):
- transport = transports.WebRiskServiceTransport(
- credentials=ga_credentials.AnonymousCredentials(),
- credentials_file="credentials.json"
- )
-
-
-def test_web_risk_service_base_transport():
- # Instantiate the base transport.
- with mock.patch('google.cloud.webrisk_v1.services.web_risk_service.transports.WebRiskServiceTransport.__init__') as Transport:
- Transport.return_value = None
- transport = transports.WebRiskServiceTransport(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Every method on the transport should just blindly
- # raise NotImplementedError.
- methods = (
- 'compute_threat_list_diff',
- 'search_uris',
- 'search_hashes',
- 'create_submission',
- )
- for method in methods:
- with pytest.raises(NotImplementedError):
- getattr(transport, method)(request=object())
-
-
-@requires_google_auth_gte_1_25_0
-def test_web_risk_service_base_transport_with_credentials_file():
- # Instantiate the base transport with a credentials file
- with mock.patch.object(google.auth, 'load_credentials_from_file', autospec=True) as load_creds, mock.patch('google.cloud.webrisk_v1.services.web_risk_service.transports.WebRiskServiceTransport._prep_wrapped_messages') as Transport:
- Transport.return_value = None
- load_creds.return_value = (ga_credentials.AnonymousCredentials(), None)
- transport = transports.WebRiskServiceTransport(
- credentials_file="credentials.json",
- quota_project_id="octopus",
- )
- load_creds.assert_called_once_with("credentials.json",
- scopes=None,
- default_scopes=(
- 'https://www.googleapis.com/auth/cloud-platform',
-),
- quota_project_id="octopus",
- )
-
-
-@requires_google_auth_lt_1_25_0
-def test_web_risk_service_base_transport_with_credentials_file_old_google_auth():
- # Instantiate the base transport with a credentials file
- with mock.patch.object(google.auth, 'load_credentials_from_file', autospec=True) as load_creds, mock.patch('google.cloud.webrisk_v1.services.web_risk_service.transports.WebRiskServiceTransport._prep_wrapped_messages') as Transport:
- Transport.return_value = None
- load_creds.return_value = (ga_credentials.AnonymousCredentials(), None)
- transport = transports.WebRiskServiceTransport(
- credentials_file="credentials.json",
- quota_project_id="octopus",
- )
- load_creds.assert_called_once_with("credentials.json", scopes=(
- 'https://www.googleapis.com/auth/cloud-platform',
- ),
- quota_project_id="octopus",
- )
-
-
-def test_web_risk_service_base_transport_with_adc():
- # Test the default credentials are used if credentials and credentials_file are None.
- with mock.patch.object(google.auth, 'default', autospec=True) as adc, mock.patch('google.cloud.webrisk_v1.services.web_risk_service.transports.WebRiskServiceTransport._prep_wrapped_messages') as Transport:
- Transport.return_value = None
- adc.return_value = (ga_credentials.AnonymousCredentials(), None)
- transport = transports.WebRiskServiceTransport()
- adc.assert_called_once()
-
-
-@requires_google_auth_gte_1_25_0
-def test_web_risk_service_auth_adc():
- # If no credentials are provided, we should use ADC credentials.
- with mock.patch.object(google.auth, 'default', autospec=True) as adc:
- adc.return_value = (ga_credentials.AnonymousCredentials(), None)
- WebRiskServiceClient()
- adc.assert_called_once_with(
- scopes=None,
- default_scopes=(
- 'https://www.googleapis.com/auth/cloud-platform',
-),
- quota_project_id=None,
- )
-
-
-@requires_google_auth_lt_1_25_0
-def test_web_risk_service_auth_adc_old_google_auth():
- # If no credentials are provided, we should use ADC credentials.
- with mock.patch.object(google.auth, 'default', autospec=True) as adc:
- adc.return_value = (ga_credentials.AnonymousCredentials(), None)
- WebRiskServiceClient()
- adc.assert_called_once_with(
- scopes=( 'https://www.googleapis.com/auth/cloud-platform',),
- quota_project_id=None,
- )
-
-
-@pytest.mark.parametrize(
- "transport_class",
- [
- transports.WebRiskServiceGrpcTransport,
- transports.WebRiskServiceGrpcAsyncIOTransport,
- ],
-)
-@requires_google_auth_gte_1_25_0
-def test_web_risk_service_transport_auth_adc(transport_class):
- # If credentials and host are not provided, the transport class should use
- # ADC credentials.
- with mock.patch.object(google.auth, 'default', autospec=True) as adc:
- adc.return_value = (ga_credentials.AnonymousCredentials(), None)
- transport_class(quota_project_id="octopus", scopes=["1", "2"])
- adc.assert_called_once_with(
- scopes=["1", "2"],
- default_scopes=( 'https://www.googleapis.com/auth/cloud-platform',),
- quota_project_id="octopus",
- )
-
-
-@pytest.mark.parametrize(
- "transport_class",
- [
- transports.WebRiskServiceGrpcTransport,
- transports.WebRiskServiceGrpcAsyncIOTransport,
- ],
-)
-@requires_google_auth_lt_1_25_0
-def test_web_risk_service_transport_auth_adc_old_google_auth(transport_class):
- # If credentials and host are not provided, the transport class should use
- # ADC credentials.
- with mock.patch.object(google.auth, "default", autospec=True) as adc:
- adc.return_value = (ga_credentials.AnonymousCredentials(), None)
- transport_class(quota_project_id="octopus")
- adc.assert_called_once_with(scopes=(
- 'https://www.googleapis.com/auth/cloud-platform',
-),
- quota_project_id="octopus",
- )
-
-
-@pytest.mark.parametrize(
- "transport_class,grpc_helpers",
- [
- (transports.WebRiskServiceGrpcTransport, grpc_helpers),
- (transports.WebRiskServiceGrpcAsyncIOTransport, grpc_helpers_async)
- ],
-)
-def test_web_risk_service_transport_create_channel(transport_class, grpc_helpers):
- # If credentials and host are not provided, the transport class should use
- # ADC credentials.
- with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch.object(
- grpc_helpers, "create_channel", autospec=True
- ) as create_channel:
- creds = ga_credentials.AnonymousCredentials()
- adc.return_value = (creds, None)
- transport_class(
- quota_project_id="octopus",
- scopes=["1", "2"]
- )
-
- create_channel.assert_called_with(
- "webrisk.googleapis.com:443",
- credentials=creds,
- credentials_file=None,
- quota_project_id="octopus",
- default_scopes=(
- 'https://www.googleapis.com/auth/cloud-platform',
-),
- scopes=["1", "2"],
- default_host="webrisk.googleapis.com",
- ssl_credentials=None,
- options=[
- ("grpc.max_send_message_length", -1),
- ("grpc.max_receive_message_length", -1),
- ],
- )
-
-
-@pytest.mark.parametrize("transport_class", [transports.WebRiskServiceGrpcTransport, transports.WebRiskServiceGrpcAsyncIOTransport])
-def test_web_risk_service_grpc_transport_client_cert_source_for_mtls(
- transport_class
-):
- cred = ga_credentials.AnonymousCredentials()
-
- # Check ssl_channel_credentials is used if provided.
- with mock.patch.object(transport_class, "create_channel") as mock_create_channel:
- mock_ssl_channel_creds = mock.Mock()
- transport_class(
- host="squid.clam.whelk",
- credentials=cred,
- ssl_channel_credentials=mock_ssl_channel_creds
- )
- mock_create_channel.assert_called_once_with(
- "squid.clam.whelk:443",
- credentials=cred,
- credentials_file=None,
- scopes=None,
- ssl_credentials=mock_ssl_channel_creds,
- quota_project_id=None,
- options=[
- ("grpc.max_send_message_length", -1),
- ("grpc.max_receive_message_length", -1),
- ],
- )
-
- # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls
- # is used.
- with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()):
- with mock.patch("grpc.ssl_channel_credentials") as mock_ssl_cred:
- transport_class(
- credentials=cred,
- client_cert_source_for_mtls=client_cert_source_callback
- )
- expected_cert, expected_key = client_cert_source_callback()
- mock_ssl_cred.assert_called_once_with(
- certificate_chain=expected_cert,
- private_key=expected_key
- )
-
-
-def test_web_risk_service_host_no_port():
- client = WebRiskServiceClient(
- credentials=ga_credentials.AnonymousCredentials(),
- client_options=client_options.ClientOptions(api_endpoint='webrisk.googleapis.com'),
- )
- assert client.transport._host == 'webrisk.googleapis.com:443'
-
-
-def test_web_risk_service_host_with_port():
- client = WebRiskServiceClient(
- credentials=ga_credentials.AnonymousCredentials(),
- client_options=client_options.ClientOptions(api_endpoint='webrisk.googleapis.com:8000'),
- )
- assert client.transport._host == 'webrisk.googleapis.com:8000'
-
-def test_web_risk_service_grpc_transport_channel():
- channel = grpc.secure_channel('http://localhost/', grpc.local_channel_credentials())
-
- # Check that channel is used if provided.
- transport = transports.WebRiskServiceGrpcTransport(
- host="squid.clam.whelk",
- channel=channel,
- )
- assert transport.grpc_channel == channel
- assert transport._host == "squid.clam.whelk:443"
- assert transport._ssl_channel_credentials == None
-
-
-def test_web_risk_service_grpc_asyncio_transport_channel():
- channel = aio.secure_channel('http://localhost/', grpc.local_channel_credentials())
-
- # Check that channel is used if provided.
- transport = transports.WebRiskServiceGrpcAsyncIOTransport(
- host="squid.clam.whelk",
- channel=channel,
- )
- assert transport.grpc_channel == channel
- assert transport._host == "squid.clam.whelk:443"
- assert transport._ssl_channel_credentials == None
-
-
-# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are
-# removed from grpc/grpc_asyncio transport constructor.
-@pytest.mark.parametrize("transport_class", [transports.WebRiskServiceGrpcTransport, transports.WebRiskServiceGrpcAsyncIOTransport])
-def test_web_risk_service_transport_channel_mtls_with_client_cert_source(
- transport_class
-):
- with mock.patch("grpc.ssl_channel_credentials", autospec=True) as grpc_ssl_channel_cred:
- with mock.patch.object(transport_class, "create_channel") as grpc_create_channel:
- mock_ssl_cred = mock.Mock()
- grpc_ssl_channel_cred.return_value = mock_ssl_cred
-
- mock_grpc_channel = mock.Mock()
- grpc_create_channel.return_value = mock_grpc_channel
-
- cred = ga_credentials.AnonymousCredentials()
- with pytest.warns(DeprecationWarning):
- with mock.patch.object(google.auth, 'default') as adc:
- adc.return_value = (cred, None)
- transport = transport_class(
- host="squid.clam.whelk",
- api_mtls_endpoint="mtls.squid.clam.whelk",
- client_cert_source=client_cert_source_callback,
- )
- adc.assert_called_once()
-
- grpc_ssl_channel_cred.assert_called_once_with(
- certificate_chain=b"cert bytes", private_key=b"key bytes"
- )
- grpc_create_channel.assert_called_once_with(
- "mtls.squid.clam.whelk:443",
- credentials=cred,
- credentials_file=None,
- scopes=None,
- ssl_credentials=mock_ssl_cred,
- quota_project_id=None,
- options=[
- ("grpc.max_send_message_length", -1),
- ("grpc.max_receive_message_length", -1),
- ],
- )
- assert transport.grpc_channel == mock_grpc_channel
- assert transport._ssl_channel_credentials == mock_ssl_cred
-
-
-# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are
-# removed from grpc/grpc_asyncio transport constructor.
-@pytest.mark.parametrize("transport_class", [transports.WebRiskServiceGrpcTransport, transports.WebRiskServiceGrpcAsyncIOTransport])
-def test_web_risk_service_transport_channel_mtls_with_adc(
- transport_class
-):
- mock_ssl_cred = mock.Mock()
- with mock.patch.multiple(
- "google.auth.transport.grpc.SslCredentials",
- __init__=mock.Mock(return_value=None),
- ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred),
- ):
- with mock.patch.object(transport_class, "create_channel") as grpc_create_channel:
- mock_grpc_channel = mock.Mock()
- grpc_create_channel.return_value = mock_grpc_channel
- mock_cred = mock.Mock()
-
- with pytest.warns(DeprecationWarning):
- transport = transport_class(
- host="squid.clam.whelk",
- credentials=mock_cred,
- api_mtls_endpoint="mtls.squid.clam.whelk",
- client_cert_source=None,
- )
-
- grpc_create_channel.assert_called_once_with(
- "mtls.squid.clam.whelk:443",
- credentials=mock_cred,
- credentials_file=None,
- scopes=None,
- ssl_credentials=mock_ssl_cred,
- quota_project_id=None,
- options=[
- ("grpc.max_send_message_length", -1),
- ("grpc.max_receive_message_length", -1),
- ],
- )
- assert transport.grpc_channel == mock_grpc_channel
-
-
-def test_common_billing_account_path():
- billing_account = "squid"
- expected = "billingAccounts/{billing_account}".format(billing_account=billing_account, )
- actual = WebRiskServiceClient.common_billing_account_path(billing_account)
- assert expected == actual
-
-
-def test_parse_common_billing_account_path():
- expected = {
- "billing_account": "clam",
- }
- path = WebRiskServiceClient.common_billing_account_path(**expected)
-
- # Check that the path construction is reversible.
- actual = WebRiskServiceClient.parse_common_billing_account_path(path)
- assert expected == actual
-
-def test_common_folder_path():
- folder = "whelk"
- expected = "folders/{folder}".format(folder=folder, )
- actual = WebRiskServiceClient.common_folder_path(folder)
- assert expected == actual
-
-
-def test_parse_common_folder_path():
- expected = {
- "folder": "octopus",
- }
- path = WebRiskServiceClient.common_folder_path(**expected)
-
- # Check that the path construction is reversible.
- actual = WebRiskServiceClient.parse_common_folder_path(path)
- assert expected == actual
-
-def test_common_organization_path():
- organization = "oyster"
- expected = "organizations/{organization}".format(organization=organization, )
- actual = WebRiskServiceClient.common_organization_path(organization)
- assert expected == actual
-
-
-def test_parse_common_organization_path():
- expected = {
- "organization": "nudibranch",
- }
- path = WebRiskServiceClient.common_organization_path(**expected)
-
- # Check that the path construction is reversible.
- actual = WebRiskServiceClient.parse_common_organization_path(path)
- assert expected == actual
-
-def test_common_project_path():
- project = "cuttlefish"
- expected = "projects/{project}".format(project=project, )
- actual = WebRiskServiceClient.common_project_path(project)
- assert expected == actual
-
-
-def test_parse_common_project_path():
- expected = {
- "project": "mussel",
- }
- path = WebRiskServiceClient.common_project_path(**expected)
-
- # Check that the path construction is reversible.
- actual = WebRiskServiceClient.parse_common_project_path(path)
- assert expected == actual
-
-def test_common_location_path():
- project = "winkle"
- location = "nautilus"
- expected = "projects/{project}/locations/{location}".format(project=project, location=location, )
- actual = WebRiskServiceClient.common_location_path(project, location)
- assert expected == actual
-
-
-def test_parse_common_location_path():
- expected = {
- "project": "scallop",
- "location": "abalone",
- }
- path = WebRiskServiceClient.common_location_path(**expected)
-
- # Check that the path construction is reversible.
- actual = WebRiskServiceClient.parse_common_location_path(path)
- assert expected == actual
-
-
-def test_client_withDEFAULT_CLIENT_INFO():
- client_info = gapic_v1.client_info.ClientInfo()
-
- with mock.patch.object(transports.WebRiskServiceTransport, '_prep_wrapped_messages') as prep:
- client = WebRiskServiceClient(
- credentials=ga_credentials.AnonymousCredentials(),
- client_info=client_info,
- )
- prep.assert_called_once_with(client_info)
-
- with mock.patch.object(transports.WebRiskServiceTransport, '_prep_wrapped_messages') as prep:
- transport_class = WebRiskServiceClient.get_transport_class()
- transport = transport_class(
- credentials=ga_credentials.AnonymousCredentials(),
- client_info=client_info,
- )
- prep.assert_called_once_with(client_info)
diff --git a/owl-bot-staging/v1beta1/.coveragerc b/owl-bot-staging/v1beta1/.coveragerc
deleted file mode 100644
index 5b506b5..0000000
--- a/owl-bot-staging/v1beta1/.coveragerc
+++ /dev/null
@@ -1,17 +0,0 @@
-[run]
-branch = True
-
-[report]
-show_missing = True
-omit =
- google/cloud/webrisk/__init__.py
-exclude_lines =
- # Re-enable the standard pragma
- pragma: NO COVER
- # Ignore debug-only repr
- def __repr__
- # Ignore pkg_resources exceptions.
- # This is added at the module level as a safeguard for if someone
- # generates the code and tries to run it without pip installing. This
- # makes it virtually impossible to test properly.
- except pkg_resources.DistributionNotFound
diff --git a/owl-bot-staging/v1beta1/MANIFEST.in b/owl-bot-staging/v1beta1/MANIFEST.in
deleted file mode 100644
index b95293c..0000000
--- a/owl-bot-staging/v1beta1/MANIFEST.in
+++ /dev/null
@@ -1,2 +0,0 @@
-recursive-include google/cloud/webrisk *.py
-recursive-include google/cloud/webrisk_v1beta1 *.py
diff --git a/owl-bot-staging/v1beta1/README.rst b/owl-bot-staging/v1beta1/README.rst
deleted file mode 100644
index 47325bb..0000000
--- a/owl-bot-staging/v1beta1/README.rst
+++ /dev/null
@@ -1,49 +0,0 @@
-Python Client for Google Cloud Webrisk API
-=================================================
-
-Quick Start
------------
-
-In order to use this library, you first need to go through the following steps:
-
-1. `Select or create a Cloud Platform project.`_
-2. `Enable billing for your project.`_
-3. Enable the Google Cloud Webrisk API.
-4. `Setup Authentication.`_
-
-.. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project
-.. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project
-.. _Setup Authentication.: https://googleapis.dev/python/google-api-core/latest/auth.html
-
-Installation
-~~~~~~~~~~~~
-
-Install this library in a `virtualenv`_ using pip. `virtualenv`_ is a tool to
-create isolated Python environments. The basic problem it addresses is one of
-dependencies and versions, and indirectly permissions.
-
-With `virtualenv`_, it's possible to install this library without needing system
-install permissions, and without clashing with the installed system
-dependencies.
-
-.. _`virtualenv`: https://virtualenv.pypa.io/en/latest/
-
-
-Mac/Linux
-^^^^^^^^^
-
-.. code-block:: console
-
- python3 -m venv
- source /bin/activate
- /bin/pip install /path/to/library
-
-
-Windows
-^^^^^^^
-
-.. code-block:: console
-
- python3 -m venv
- \Scripts\activate
- \Scripts\pip.exe install \path\to\library
diff --git a/owl-bot-staging/v1beta1/docs/conf.py b/owl-bot-staging/v1beta1/docs/conf.py
deleted file mode 100644
index ed09c72..0000000
--- a/owl-bot-staging/v1beta1/docs/conf.py
+++ /dev/null
@@ -1,376 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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.
-#
-#
-# google-cloud-webrisk documentation build configuration file
-#
-# This file is execfile()d with the current directory set to its
-# containing dir.
-#
-# Note that not all possible configuration values are present in this
-# autogenerated file.
-#
-# All configuration values have a default; values that are commented out
-# serve to show the default.
-
-import sys
-import os
-import shlex
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-sys.path.insert(0, os.path.abspath(".."))
-
-__version__ = "0.1.0"
-
-# -- General configuration ------------------------------------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-needs_sphinx = "1.6.3"
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
-# ones.
-extensions = [
- "sphinx.ext.autodoc",
- "sphinx.ext.autosummary",
- "sphinx.ext.intersphinx",
- "sphinx.ext.coverage",
- "sphinx.ext.napoleon",
- "sphinx.ext.todo",
- "sphinx.ext.viewcode",
-]
-
-# autodoc/autosummary flags
-autoclass_content = "both"
-autodoc_default_flags = ["members"]
-autosummary_generate = True
-
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ["_templates"]
-
-# Allow markdown includes (so releases.md can include CHANGLEOG.md)
-# http://www.sphinx-doc.org/en/master/markdown.html
-source_parsers = {".md": "recommonmark.parser.CommonMarkParser"}
-
-# The suffix(es) of source filenames.
-# You can specify multiple suffix as a list of string:
-source_suffix = [".rst", ".md"]
-
-# The encoding of source files.
-# source_encoding = 'utf-8-sig'
-
-# The master toctree document.
-master_doc = "index"
-
-# General information about the project.
-project = u"google-cloud-webrisk"
-copyright = u"2020, Google, LLC"
-author = u"Google APIs" # TODO: autogenerate this bit
-
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-# The full version, including alpha/beta/rc tags.
-release = __version__
-# The short X.Y version.
-version = ".".join(release.split(".")[0:2])
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#
-# This is also used if you do content translation via gettext catalogs.
-# Usually you set "language" from the command line for these cases.
-language = None
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-# today = ''
-# Else, today_fmt is used as the format for a strftime call.
-# today_fmt = '%B %d, %Y'
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-exclude_patterns = ["_build"]
-
-# The reST default role (used for this markup: `text`) to use for all
-# documents.
-# default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-# add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-# add_module_names = True
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-# show_authors = False
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = "sphinx"
-
-# A list of ignored prefixes for module index sorting.
-# modindex_common_prefix = []
-
-# If true, keep warnings as "system message" paragraphs in the built documents.
-# keep_warnings = False
-
-# If true, `todo` and `todoList` produce output, else they produce nothing.
-todo_include_todos = True
-
-
-# -- Options for HTML output ----------------------------------------------
-
-# The theme to use for HTML and HTML Help pages. See the documentation for
-# a list of builtin themes.
-html_theme = "alabaster"
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further. For a list of options available for each theme, see the
-# documentation.
-html_theme_options = {
- "description": "Google Cloud Client Libraries for Python",
- "github_user": "googleapis",
- "github_repo": "google-cloud-python",
- "github_banner": True,
- "font_family": "'Roboto', Georgia, sans",
- "head_font_family": "'Roboto', Georgia, serif",
- "code_font_family": "'Roboto Mono', 'Consolas', monospace",
-}
-
-# Add any paths that contain custom themes here, relative to this directory.
-# html_theme_path = []
-
-# The name for this set of Sphinx documents. If None, it defaults to
-# " v documentation".
-# html_title = None
-
-# A shorter title for the navigation bar. Default is the same as html_title.
-# html_short_title = None
-
-# The name of an image file (relative to this directory) to place at the top
-# of the sidebar.
-# html_logo = None
-
-# The name of an image file (within the static path) to use as favicon of the
-# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-# html_favicon = None
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ["_static"]
-
-# Add any extra paths that contain custom files (such as robots.txt or
-# .htaccess) here, relative to this directory. These files are copied
-# directly to the root of the documentation.
-# html_extra_path = []
-
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-# html_last_updated_fmt = '%b %d, %Y'
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-# html_use_smartypants = True
-
-# Custom sidebar templates, maps document names to template names.
-# html_sidebars = {}
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-# html_additional_pages = {}
-
-# If false, no module index is generated.
-# html_domain_indices = True
-
-# If false, no index is generated.
-# html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-# html_split_index = False
-
-# If true, links to the reST sources are added to the pages.
-# html_show_sourcelink = True
-
-# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-# html_show_sphinx = True
-
-# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-# html_show_copyright = True
-
-# If true, an OpenSearch description file will be output, and all pages will
-# contain a tag referring to it. The value of this option must be the
-# base URL from which the finished HTML is served.
-# html_use_opensearch = ''
-
-# This is the file name suffix for HTML files (e.g. ".xhtml").
-# html_file_suffix = None
-
-# Language to be used for generating the HTML full-text search index.
-# Sphinx supports the following languages:
-# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
-# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
-# html_search_language = 'en'
-
-# A dictionary with options for the search language support, empty by default.
-# Now only 'ja' uses this config value
-# html_search_options = {'type': 'default'}
-
-# The name of a javascript file (relative to the configuration directory) that
-# implements a search results scorer. If empty, the default will be used.
-# html_search_scorer = 'scorer.js'
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = "google-cloud-webrisk-doc"
-
-# -- Options for warnings ------------------------------------------------------
-
-
-suppress_warnings = [
- # Temporarily suppress this to avoid "more than one target found for
- # cross-reference" warning, which are intractable for us to avoid while in
- # a mono-repo.
- # See https://github.com/sphinx-doc/sphinx/blob
- # /2a65ffeef5c107c19084fabdd706cdff3f52d93c/sphinx/domains/python.py#L843
- "ref.python"
-]
-
-# -- Options for LaTeX output ---------------------------------------------
-
-latex_elements = {
- # The paper size ('letterpaper' or 'a4paper').
- # 'papersize': 'letterpaper',
- # The font size ('10pt', '11pt' or '12pt').
- # 'pointsize': '10pt',
- # Additional stuff for the LaTeX preamble.
- # 'preamble': '',
- # Latex figure (float) alignment
- # 'figure_align': 'htbp',
-}
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title,
-# author, documentclass [howto, manual, or own class]).
-latex_documents = [
- (
- master_doc,
- "google-cloud-webrisk.tex",
- u"google-cloud-webrisk Documentation",
- author,
- "manual",
- )
-]
-
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-# latex_logo = None
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-# latex_use_parts = False
-
-# If true, show page references after internal links.
-# latex_show_pagerefs = False
-
-# If true, show URL addresses after external links.
-# latex_show_urls = False
-
-# Documents to append as an appendix to all manuals.
-# latex_appendices = []
-
-# If false, no module index is generated.
-# latex_domain_indices = True
-
-
-# -- Options for manual page output ---------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [
- (
- master_doc,
- "google-cloud-webrisk",
- u"Google Cloud Webrisk Documentation",
- [author],
- 1,
- )
-]
-
-# If true, show URL addresses after external links.
-# man_show_urls = False
-
-
-# -- Options for Texinfo output -------------------------------------------
-
-# Grouping the document tree into Texinfo files. List of tuples
-# (source start file, target name, title, author,
-# dir menu entry, description, category)
-texinfo_documents = [
- (
- master_doc,
- "google-cloud-webrisk",
- u"google-cloud-webrisk Documentation",
- author,
- "google-cloud-webrisk",
- "GAPIC library for Google Cloud Webrisk API",
- "APIs",
- )
-]
-
-# Documents to append as an appendix to all manuals.
-# texinfo_appendices = []
-
-# If false, no module index is generated.
-# texinfo_domain_indices = True
-
-# How to display URL addresses: 'footnote', 'no', or 'inline'.
-# texinfo_show_urls = 'footnote'
-
-# If true, do not generate a @detailmenu in the "Top" node's menu.
-# texinfo_no_detailmenu = False
-
-
-# Example configuration for intersphinx: refer to the Python standard library.
-intersphinx_mapping = {
- "python": ("http://python.readthedocs.org/en/latest/", None),
- "gax": ("https://gax-python.readthedocs.org/en/latest/", None),
- "google-auth": ("https://google-auth.readthedocs.io/en/stable", None),
- "google-gax": ("https://gax-python.readthedocs.io/en/latest/", None),
- "google.api_core": ("https://googleapis.dev/python/google-api-core/latest/", None),
- "grpc": ("https://grpc.io/grpc/python/", None),
- "requests": ("http://requests.kennethreitz.org/en/stable/", None),
- "proto": ("https://proto-plus-python.readthedocs.io/en/stable", None),
- "protobuf": ("https://googleapis.dev/python/protobuf/latest/", None),
-}
-
-
-# Napoleon settings
-napoleon_google_docstring = True
-napoleon_numpy_docstring = True
-napoleon_include_private_with_doc = False
-napoleon_include_special_with_doc = True
-napoleon_use_admonition_for_examples = False
-napoleon_use_admonition_for_notes = False
-napoleon_use_admonition_for_references = False
-napoleon_use_ivar = False
-napoleon_use_param = True
-napoleon_use_rtype = True
diff --git a/owl-bot-staging/v1beta1/docs/index.rst b/owl-bot-staging/v1beta1/docs/index.rst
deleted file mode 100644
index 74d4aaa..0000000
--- a/owl-bot-staging/v1beta1/docs/index.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-API Reference
--------------
-.. toctree::
- :maxdepth: 2
-
- webrisk_v1beta1/services
- webrisk_v1beta1/types
diff --git a/owl-bot-staging/v1beta1/docs/webrisk_v1beta1/services.rst b/owl-bot-staging/v1beta1/docs/webrisk_v1beta1/services.rst
deleted file mode 100644
index 19a06a3..0000000
--- a/owl-bot-staging/v1beta1/docs/webrisk_v1beta1/services.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-Services for Google Cloud Webrisk v1beta1 API
-=============================================
-.. toctree::
- :maxdepth: 2
-
- web_risk_service_v1_beta1
diff --git a/owl-bot-staging/v1beta1/docs/webrisk_v1beta1/types.rst b/owl-bot-staging/v1beta1/docs/webrisk_v1beta1/types.rst
deleted file mode 100644
index 440fe29..0000000
--- a/owl-bot-staging/v1beta1/docs/webrisk_v1beta1/types.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Types for Google Cloud Webrisk v1beta1 API
-==========================================
-
-.. automodule:: google.cloud.webrisk_v1beta1.types
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/owl-bot-staging/v1beta1/docs/webrisk_v1beta1/web_risk_service_v1_beta1.rst b/owl-bot-staging/v1beta1/docs/webrisk_v1beta1/web_risk_service_v1_beta1.rst
deleted file mode 100644
index aea23da..0000000
--- a/owl-bot-staging/v1beta1/docs/webrisk_v1beta1/web_risk_service_v1_beta1.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-WebRiskServiceV1Beta1
----------------------------------------
-
-.. automodule:: google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1
- :members:
- :inherited-members:
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk/__init__.py b/owl-bot-staging/v1beta1/google/cloud/webrisk/__init__.py
deleted file mode 100644
index 7fc599e..0000000
--- a/owl-bot-staging/v1beta1/google/cloud/webrisk/__init__.py
+++ /dev/null
@@ -1,49 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-from google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1.client import WebRiskServiceV1Beta1Client
-from google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1.async_client import WebRiskServiceV1Beta1AsyncClient
-
-from google.cloud.webrisk_v1beta1.types.webrisk import ComputeThreatListDiffRequest
-from google.cloud.webrisk_v1beta1.types.webrisk import ComputeThreatListDiffResponse
-from google.cloud.webrisk_v1beta1.types.webrisk import RawHashes
-from google.cloud.webrisk_v1beta1.types.webrisk import RawIndices
-from google.cloud.webrisk_v1beta1.types.webrisk import RiceDeltaEncoding
-from google.cloud.webrisk_v1beta1.types.webrisk import SearchHashesRequest
-from google.cloud.webrisk_v1beta1.types.webrisk import SearchHashesResponse
-from google.cloud.webrisk_v1beta1.types.webrisk import SearchUrisRequest
-from google.cloud.webrisk_v1beta1.types.webrisk import SearchUrisResponse
-from google.cloud.webrisk_v1beta1.types.webrisk import ThreatEntryAdditions
-from google.cloud.webrisk_v1beta1.types.webrisk import ThreatEntryRemovals
-from google.cloud.webrisk_v1beta1.types.webrisk import CompressionType
-from google.cloud.webrisk_v1beta1.types.webrisk import ThreatType
-
-__all__ = ('WebRiskServiceV1Beta1Client',
- 'WebRiskServiceV1Beta1AsyncClient',
- 'ComputeThreatListDiffRequest',
- 'ComputeThreatListDiffResponse',
- 'RawHashes',
- 'RawIndices',
- 'RiceDeltaEncoding',
- 'SearchHashesRequest',
- 'SearchHashesResponse',
- 'SearchUrisRequest',
- 'SearchUrisResponse',
- 'ThreatEntryAdditions',
- 'ThreatEntryRemovals',
- 'CompressionType',
- 'ThreatType',
-)
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk/py.typed b/owl-bot-staging/v1beta1/google/cloud/webrisk/py.typed
deleted file mode 100644
index bef3da1..0000000
--- a/owl-bot-staging/v1beta1/google/cloud/webrisk/py.typed
+++ /dev/null
@@ -1,2 +0,0 @@
-# Marker file for PEP 561.
-# The google-cloud-webrisk package uses inline types.
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/__init__.py b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/__init__.py
deleted file mode 100644
index 69a3488..0000000
--- a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/__init__.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-from .services.web_risk_service_v1_beta1 import WebRiskServiceV1Beta1Client
-from .services.web_risk_service_v1_beta1 import WebRiskServiceV1Beta1AsyncClient
-
-from .types.webrisk import ComputeThreatListDiffRequest
-from .types.webrisk import ComputeThreatListDiffResponse
-from .types.webrisk import RawHashes
-from .types.webrisk import RawIndices
-from .types.webrisk import RiceDeltaEncoding
-from .types.webrisk import SearchHashesRequest
-from .types.webrisk import SearchHashesResponse
-from .types.webrisk import SearchUrisRequest
-from .types.webrisk import SearchUrisResponse
-from .types.webrisk import ThreatEntryAdditions
-from .types.webrisk import ThreatEntryRemovals
-from .types.webrisk import CompressionType
-from .types.webrisk import ThreatType
-
-__all__ = (
- 'WebRiskServiceV1Beta1AsyncClient',
-'CompressionType',
-'ComputeThreatListDiffRequest',
-'ComputeThreatListDiffResponse',
-'RawHashes',
-'RawIndices',
-'RiceDeltaEncoding',
-'SearchHashesRequest',
-'SearchHashesResponse',
-'SearchUrisRequest',
-'SearchUrisResponse',
-'ThreatEntryAdditions',
-'ThreatEntryRemovals',
-'ThreatType',
-'WebRiskServiceV1Beta1Client',
-)
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/gapic_metadata.json b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/gapic_metadata.json
deleted file mode 100644
index 64df094..0000000
--- a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/gapic_metadata.json
+++ /dev/null
@@ -1,53 +0,0 @@
- {
- "comment": "This file maps proto services/RPCs to the corresponding library clients/methods",
- "language": "python",
- "libraryPackage": "google.cloud.webrisk_v1beta1",
- "protoPackage": "google.cloud.webrisk.v1beta1",
- "schema": "1.0",
- "services": {
- "WebRiskServiceV1Beta1": {
- "clients": {
- "grpc": {
- "libraryClient": "WebRiskServiceV1Beta1Client",
- "rpcs": {
- "ComputeThreatListDiff": {
- "methods": [
- "compute_threat_list_diff"
- ]
- },
- "SearchHashes": {
- "methods": [
- "search_hashes"
- ]
- },
- "SearchUris": {
- "methods": [
- "search_uris"
- ]
- }
- }
- },
- "grpc-async": {
- "libraryClient": "WebRiskServiceV1Beta1AsyncClient",
- "rpcs": {
- "ComputeThreatListDiff": {
- "methods": [
- "compute_threat_list_diff"
- ]
- },
- "SearchHashes": {
- "methods": [
- "search_hashes"
- ]
- },
- "SearchUris": {
- "methods": [
- "search_uris"
- ]
- }
- }
- }
- }
- }
- }
-}
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/py.typed b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/py.typed
deleted file mode 100644
index bef3da1..0000000
--- a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/py.typed
+++ /dev/null
@@ -1,2 +0,0 @@
-# Marker file for PEP 561.
-# The google-cloud-webrisk package uses inline types.
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/__init__.py b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/__init__.py
deleted file mode 100644
index 4de6597..0000000
--- a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/__init__.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/__init__.py b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/__init__.py
deleted file mode 100644
index 1649c97..0000000
--- a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/__init__.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-from .client import WebRiskServiceV1Beta1Client
-from .async_client import WebRiskServiceV1Beta1AsyncClient
-
-__all__ = (
- 'WebRiskServiceV1Beta1Client',
- 'WebRiskServiceV1Beta1AsyncClient',
-)
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/async_client.py b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/async_client.py
deleted file mode 100644
index 2777eba..0000000
--- a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/async_client.py
+++ /dev/null
@@ -1,426 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-from collections import OrderedDict
-import functools
-import re
-from typing import Dict, Sequence, Tuple, Type, Union
-import pkg_resources
-
-import google.api_core.client_options as ClientOptions # type: ignore
-from google.api_core import exceptions as core_exceptions # type: ignore
-from google.api_core import gapic_v1 # type: ignore
-from google.api_core import retry as retries # type: ignore
-from google.auth import credentials as ga_credentials # type: ignore
-from google.oauth2 import service_account # type: ignore
-
-from google.cloud.webrisk_v1beta1.types import webrisk
-from google.protobuf import timestamp_pb2 # type: ignore
-from .transports.base import WebRiskServiceV1Beta1Transport, DEFAULT_CLIENT_INFO
-from .transports.grpc_asyncio import WebRiskServiceV1Beta1GrpcAsyncIOTransport
-from .client import WebRiskServiceV1Beta1Client
-
-
-class WebRiskServiceV1Beta1AsyncClient:
- """Web Risk v1beta1 API defines an interface to detect malicious
- URLs on your website and in client applications.
- """
-
- _client: WebRiskServiceV1Beta1Client
-
- DEFAULT_ENDPOINT = WebRiskServiceV1Beta1Client.DEFAULT_ENDPOINT
- DEFAULT_MTLS_ENDPOINT = WebRiskServiceV1Beta1Client.DEFAULT_MTLS_ENDPOINT
-
- common_billing_account_path = staticmethod(WebRiskServiceV1Beta1Client.common_billing_account_path)
- parse_common_billing_account_path = staticmethod(WebRiskServiceV1Beta1Client.parse_common_billing_account_path)
- common_folder_path = staticmethod(WebRiskServiceV1Beta1Client.common_folder_path)
- parse_common_folder_path = staticmethod(WebRiskServiceV1Beta1Client.parse_common_folder_path)
- common_organization_path = staticmethod(WebRiskServiceV1Beta1Client.common_organization_path)
- parse_common_organization_path = staticmethod(WebRiskServiceV1Beta1Client.parse_common_organization_path)
- common_project_path = staticmethod(WebRiskServiceV1Beta1Client.common_project_path)
- parse_common_project_path = staticmethod(WebRiskServiceV1Beta1Client.parse_common_project_path)
- common_location_path = staticmethod(WebRiskServiceV1Beta1Client.common_location_path)
- parse_common_location_path = staticmethod(WebRiskServiceV1Beta1Client.parse_common_location_path)
-
- @classmethod
- def from_service_account_info(cls, info: dict, *args, **kwargs):
- """Creates an instance of this client using the provided credentials
- info.
-
- Args:
- info (dict): The service account private key info.
- args: Additional arguments to pass to the constructor.
- kwargs: Additional arguments to pass to the constructor.
-
- Returns:
- WebRiskServiceV1Beta1AsyncClient: The constructed client.
- """
- return WebRiskServiceV1Beta1Client.from_service_account_info.__func__(WebRiskServiceV1Beta1AsyncClient, info, *args, **kwargs) # type: ignore
-
- @classmethod
- def from_service_account_file(cls, filename: str, *args, **kwargs):
- """Creates an instance of this client using the provided credentials
- file.
-
- Args:
- filename (str): The path to the service account private key json
- file.
- args: Additional arguments to pass to the constructor.
- kwargs: Additional arguments to pass to the constructor.
-
- Returns:
- WebRiskServiceV1Beta1AsyncClient: The constructed client.
- """
- return WebRiskServiceV1Beta1Client.from_service_account_file.__func__(WebRiskServiceV1Beta1AsyncClient, filename, *args, **kwargs) # type: ignore
-
- from_service_account_json = from_service_account_file
-
- @property
- def transport(self) -> WebRiskServiceV1Beta1Transport:
- """Returns the transport used by the client instance.
-
- Returns:
- WebRiskServiceV1Beta1Transport: The transport used by the client instance.
- """
- return self._client.transport
-
- get_transport_class = functools.partial(type(WebRiskServiceV1Beta1Client).get_transport_class, type(WebRiskServiceV1Beta1Client))
-
- def __init__(self, *,
- credentials: ga_credentials.Credentials = None,
- transport: Union[str, WebRiskServiceV1Beta1Transport] = "grpc_asyncio",
- client_options: ClientOptions = None,
- client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
- ) -> None:
- """Instantiates the web risk service v1 beta1 client.
-
- Args:
- credentials (Optional[google.auth.credentials.Credentials]): The
- authorization credentials to attach to requests. These
- credentials identify the application to the service; if none
- are specified, the client will attempt to ascertain the
- credentials from the environment.
- transport (Union[str, ~.WebRiskServiceV1Beta1Transport]): The
- transport to use. If set to None, a transport is chosen
- automatically.
- client_options (ClientOptions): Custom options for the client. It
- won't take effect if a ``transport`` instance is provided.
- (1) The ``api_endpoint`` property can be used to override the
- default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT
- environment variable can also be used to override the endpoint:
- "always" (always use the default mTLS endpoint), "never" (always
- use the default regular endpoint) and "auto" (auto switch to the
- default mTLS endpoint if client certificate is present, this is
- the default value). However, the ``api_endpoint`` property takes
- precedence if provided.
- (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable
- is "true", then the ``client_cert_source`` property can be used
- to provide client certificate for mutual TLS transport. If
- not provided, the default SSL client certificate will be used if
- present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not
- set, no client certificate will be used.
-
- Raises:
- google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport
- creation failed for any reason.
- """
- self._client = WebRiskServiceV1Beta1Client(
- credentials=credentials,
- transport=transport,
- client_options=client_options,
- client_info=client_info,
-
- )
-
- async def compute_threat_list_diff(self,
- request: webrisk.ComputeThreatListDiffRequest = None,
- *,
- threat_type: webrisk.ThreatType = None,
- version_token: bytes = None,
- constraints: webrisk.ComputeThreatListDiffRequest.Constraints = None,
- retry: retries.Retry = gapic_v1.method.DEFAULT,
- timeout: float = None,
- metadata: Sequence[Tuple[str, str]] = (),
- ) -> webrisk.ComputeThreatListDiffResponse:
- r"""Gets the most recent threat list diffs.
-
- Args:
- request (:class:`google.cloud.webrisk_v1beta1.types.ComputeThreatListDiffRequest`):
- The request object. Describes an API diff request.
- threat_type (:class:`google.cloud.webrisk_v1beta1.types.ThreatType`):
- The ThreatList to update.
- This corresponds to the ``threat_type`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- version_token (:class:`bytes`):
- The current version token of the
- client for the requested list (the
- client version that was received from
- the last successful diff).
-
- This corresponds to the ``version_token`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- constraints (:class:`google.cloud.webrisk_v1beta1.types.ComputeThreatListDiffRequest.Constraints`):
- Required. The constraints associated
- with this request.
-
- This corresponds to the ``constraints`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
- should be retried.
- timeout (float): The timeout for this request.
- metadata (Sequence[Tuple[str, str]]): Strings which should be
- sent along with the request as metadata.
-
- Returns:
- google.cloud.webrisk_v1beta1.types.ComputeThreatListDiffResponse:
-
- """
- # Create or coerce a protobuf request object.
- # Sanity check: If we got a request object, we should *not* have
- # gotten any keyword arguments that map to the request.
- has_flattened_params = any([threat_type, version_token, constraints])
- if request is not None and has_flattened_params:
- raise ValueError("If the `request` argument is set, then none of "
- "the individual field arguments should be set.")
-
- request = webrisk.ComputeThreatListDiffRequest(request)
-
- # If we have keyword arguments corresponding to fields on the
- # request, apply these.
- if threat_type is not None:
- request.threat_type = threat_type
- if version_token is not None:
- request.version_token = version_token
- if constraints is not None:
- request.constraints = constraints
-
- # Wrap the RPC method; this adds retry and timeout information,
- # and friendly error handling.
- rpc = gapic_v1.method_async.wrap_method(
- self._client._transport.compute_threat_list_diff,
- default_retry=retries.Retry(
-initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
- core_exceptions.DeadlineExceeded,
- core_exceptions.ServiceUnavailable,
- ),
- deadline=600.0,
- ),
- default_timeout=600.0,
- client_info=DEFAULT_CLIENT_INFO,
- )
-
- # Send the request.
- response = await rpc(
- request,
- retry=retry,
- timeout=timeout,
- metadata=metadata,
- )
-
- # Done; return the response.
- return response
-
- async def search_uris(self,
- request: webrisk.SearchUrisRequest = None,
- *,
- uri: str = None,
- threat_types: Sequence[webrisk.ThreatType] = None,
- retry: retries.Retry = gapic_v1.method.DEFAULT,
- timeout: float = None,
- metadata: Sequence[Tuple[str, str]] = (),
- ) -> webrisk.SearchUrisResponse:
- r"""This method is used to check whether a URI is on a
- given threatList.
-
- Args:
- request (:class:`google.cloud.webrisk_v1beta1.types.SearchUrisRequest`):
- The request object. Request to check URI entries against
- threatLists.
- uri (:class:`str`):
- Required. The URI to be checked for
- matches.
-
- This corresponds to the ``uri`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- threat_types (:class:`Sequence[google.cloud.webrisk_v1beta1.types.ThreatType]`):
- Required. The ThreatLists to search
- in.
-
- This corresponds to the ``threat_types`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
- should be retried.
- timeout (float): The timeout for this request.
- metadata (Sequence[Tuple[str, str]]): Strings which should be
- sent along with the request as metadata.
-
- Returns:
- google.cloud.webrisk_v1beta1.types.SearchUrisResponse:
-
- """
- # Create or coerce a protobuf request object.
- # Sanity check: If we got a request object, we should *not* have
- # gotten any keyword arguments that map to the request.
- has_flattened_params = any([uri, threat_types])
- if request is not None and has_flattened_params:
- raise ValueError("If the `request` argument is set, then none of "
- "the individual field arguments should be set.")
-
- request = webrisk.SearchUrisRequest(request)
-
- # If we have keyword arguments corresponding to fields on the
- # request, apply these.
- if uri is not None:
- request.uri = uri
- if threat_types:
- request.threat_types.extend(threat_types)
-
- # Wrap the RPC method; this adds retry and timeout information,
- # and friendly error handling.
- rpc = gapic_v1.method_async.wrap_method(
- self._client._transport.search_uris,
- default_retry=retries.Retry(
-initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
- core_exceptions.DeadlineExceeded,
- core_exceptions.ServiceUnavailable,
- ),
- deadline=600.0,
- ),
- default_timeout=600.0,
- client_info=DEFAULT_CLIENT_INFO,
- )
-
- # Send the request.
- response = await rpc(
- request,
- retry=retry,
- timeout=timeout,
- metadata=metadata,
- )
-
- # Done; return the response.
- return response
-
- async def search_hashes(self,
- request: webrisk.SearchHashesRequest = None,
- *,
- hash_prefix: bytes = None,
- threat_types: Sequence[webrisk.ThreatType] = None,
- retry: retries.Retry = gapic_v1.method.DEFAULT,
- timeout: float = None,
- metadata: Sequence[Tuple[str, str]] = (),
- ) -> webrisk.SearchHashesResponse:
- r"""Gets the full hashes that match the requested hash
- prefix. This is used after a hash prefix is looked up in
- a threatList and there is a match. The client side
- threatList only holds partial hashes so the client must
- query this method to determine if there is a full hash
- match of a threat.
-
- Args:
- request (:class:`google.cloud.webrisk_v1beta1.types.SearchHashesRequest`):
- The request object. Request to return full hashes
- matched by the provided hash prefixes.
- hash_prefix (:class:`bytes`):
- A hash prefix, consisting of the most
- significant 4-32 bytes of a SHA256 hash.
- For JSON requests, this field is
- base64-encoded.
-
- This corresponds to the ``hash_prefix`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- threat_types (:class:`Sequence[google.cloud.webrisk_v1beta1.types.ThreatType]`):
- Required. The ThreatLists to search
- in.
-
- This corresponds to the ``threat_types`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
- should be retried.
- timeout (float): The timeout for this request.
- metadata (Sequence[Tuple[str, str]]): Strings which should be
- sent along with the request as metadata.
-
- Returns:
- google.cloud.webrisk_v1beta1.types.SearchHashesResponse:
-
- """
- # Create or coerce a protobuf request object.
- # Sanity check: If we got a request object, we should *not* have
- # gotten any keyword arguments that map to the request.
- has_flattened_params = any([hash_prefix, threat_types])
- if request is not None and has_flattened_params:
- raise ValueError("If the `request` argument is set, then none of "
- "the individual field arguments should be set.")
-
- request = webrisk.SearchHashesRequest(request)
-
- # If we have keyword arguments corresponding to fields on the
- # request, apply these.
- if hash_prefix is not None:
- request.hash_prefix = hash_prefix
- if threat_types:
- request.threat_types.extend(threat_types)
-
- # Wrap the RPC method; this adds retry and timeout information,
- # and friendly error handling.
- rpc = gapic_v1.method_async.wrap_method(
- self._client._transport.search_hashes,
- default_retry=retries.Retry(
-initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
- core_exceptions.DeadlineExceeded,
- core_exceptions.ServiceUnavailable,
- ),
- deadline=600.0,
- ),
- default_timeout=600.0,
- client_info=DEFAULT_CLIENT_INFO,
- )
-
- # Send the request.
- response = await rpc(
- request,
- retry=retry,
- timeout=timeout,
- metadata=metadata,
- )
-
- # Done; return the response.
- return response
-
-
-
-
-
-try:
- DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(
- gapic_version=pkg_resources.get_distribution(
- "google-cloud-webrisk",
- ).version,
- )
-except pkg_resources.DistributionNotFound:
- DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo()
-
-
-__all__ = (
- "WebRiskServiceV1Beta1AsyncClient",
-)
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/client.py b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/client.py
deleted file mode 100644
index ccfc5f8..0000000
--- a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/client.py
+++ /dev/null
@@ -1,583 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-from collections import OrderedDict
-from distutils import util
-import os
-import re
-from typing import Callable, Dict, Optional, Sequence, Tuple, Type, Union
-import pkg_resources
-
-from google.api_core import client_options as client_options_lib # type: ignore
-from google.api_core import exceptions as core_exceptions # type: ignore
-from google.api_core import gapic_v1 # type: ignore
-from google.api_core import retry as retries # type: ignore
-from google.auth import credentials as ga_credentials # type: ignore
-from google.auth.transport import mtls # type: ignore
-from google.auth.transport.grpc import SslCredentials # type: ignore
-from google.auth.exceptions import MutualTLSChannelError # type: ignore
-from google.oauth2 import service_account # type: ignore
-
-from google.cloud.webrisk_v1beta1.types import webrisk
-from google.protobuf import timestamp_pb2 # type: ignore
-from .transports.base import WebRiskServiceV1Beta1Transport, DEFAULT_CLIENT_INFO
-from .transports.grpc import WebRiskServiceV1Beta1GrpcTransport
-from .transports.grpc_asyncio import WebRiskServiceV1Beta1GrpcAsyncIOTransport
-
-
-class WebRiskServiceV1Beta1ClientMeta(type):
- """Metaclass for the WebRiskServiceV1Beta1 client.
-
- This provides class-level methods for building and retrieving
- support objects (e.g. transport) without polluting the client instance
- objects.
- """
- _transport_registry = OrderedDict() # type: Dict[str, Type[WebRiskServiceV1Beta1Transport]]
- _transport_registry["grpc"] = WebRiskServiceV1Beta1GrpcTransport
- _transport_registry["grpc_asyncio"] = WebRiskServiceV1Beta1GrpcAsyncIOTransport
-
- def get_transport_class(cls,
- label: str = None,
- ) -> Type[WebRiskServiceV1Beta1Transport]:
- """Returns an appropriate transport class.
-
- Args:
- label: The name of the desired transport. If none is
- provided, then the first transport in the registry is used.
-
- Returns:
- The transport class to use.
- """
- # If a specific transport is requested, return that one.
- if label:
- return cls._transport_registry[label]
-
- # No transport is requested; return the default (that is, the first one
- # in the dictionary).
- return next(iter(cls._transport_registry.values()))
-
-
-class WebRiskServiceV1Beta1Client(metaclass=WebRiskServiceV1Beta1ClientMeta):
- """Web Risk v1beta1 API defines an interface to detect malicious
- URLs on your website and in client applications.
- """
-
- @staticmethod
- def _get_default_mtls_endpoint(api_endpoint):
- """Converts api endpoint to mTLS endpoint.
-
- Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to
- "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively.
- Args:
- api_endpoint (Optional[str]): the api endpoint to convert.
- Returns:
- str: converted mTLS api endpoint.
- """
- if not api_endpoint:
- return api_endpoint
-
- mtls_endpoint_re = re.compile(
- r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?"
- )
-
- m = mtls_endpoint_re.match(api_endpoint)
- name, mtls, sandbox, googledomain = m.groups()
- if mtls or not googledomain:
- return api_endpoint
-
- if sandbox:
- return api_endpoint.replace(
- "sandbox.googleapis.com", "mtls.sandbox.googleapis.com"
- )
-
- return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com")
-
- DEFAULT_ENDPOINT = "webrisk.googleapis.com"
- DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore
- DEFAULT_ENDPOINT
- )
-
- @classmethod
- def from_service_account_info(cls, info: dict, *args, **kwargs):
- """Creates an instance of this client using the provided credentials
- info.
-
- Args:
- info (dict): The service account private key info.
- args: Additional arguments to pass to the constructor.
- kwargs: Additional arguments to pass to the constructor.
-
- Returns:
- WebRiskServiceV1Beta1Client: The constructed client.
- """
- credentials = service_account.Credentials.from_service_account_info(info)
- kwargs["credentials"] = credentials
- return cls(*args, **kwargs)
-
- @classmethod
- def from_service_account_file(cls, filename: str, *args, **kwargs):
- """Creates an instance of this client using the provided credentials
- file.
-
- Args:
- filename (str): The path to the service account private key json
- file.
- args: Additional arguments to pass to the constructor.
- kwargs: Additional arguments to pass to the constructor.
-
- Returns:
- WebRiskServiceV1Beta1Client: The constructed client.
- """
- credentials = service_account.Credentials.from_service_account_file(
- filename)
- kwargs["credentials"] = credentials
- return cls(*args, **kwargs)
-
- from_service_account_json = from_service_account_file
-
- @property
- def transport(self) -> WebRiskServiceV1Beta1Transport:
- """Returns the transport used by the client instance.
-
- Returns:
- WebRiskServiceV1Beta1Transport: The transport used by the client
- instance.
- """
- return self._transport
-
- @staticmethod
- def common_billing_account_path(billing_account: str, ) -> str:
- """Returns a fully-qualified billing_account string."""
- return "billingAccounts/{billing_account}".format(billing_account=billing_account, )
-
- @staticmethod
- def parse_common_billing_account_path(path: str) -> Dict[str,str]:
- """Parse a billing_account path into its component segments."""
- m = re.match(r"^billingAccounts/(?P.+?)$", path)
- return m.groupdict() if m else {}
-
- @staticmethod
- def common_folder_path(folder: str, ) -> str:
- """Returns a fully-qualified folder string."""
- return "folders/{folder}".format(folder=folder, )
-
- @staticmethod
- def parse_common_folder_path(path: str) -> Dict[str,str]:
- """Parse a folder path into its component segments."""
- m = re.match(r"^folders/(?P.+?)$", path)
- return m.groupdict() if m else {}
-
- @staticmethod
- def common_organization_path(organization: str, ) -> str:
- """Returns a fully-qualified organization string."""
- return "organizations/{organization}".format(organization=organization, )
-
- @staticmethod
- def parse_common_organization_path(path: str) -> Dict[str,str]:
- """Parse a organization path into its component segments."""
- m = re.match(r"^organizations/(?P.+?)$", path)
- return m.groupdict() if m else {}
-
- @staticmethod
- def common_project_path(project: str, ) -> str:
- """Returns a fully-qualified project string."""
- return "projects/{project}".format(project=project, )
-
- @staticmethod
- def parse_common_project_path(path: str) -> Dict[str,str]:
- """Parse a project path into its component segments."""
- m = re.match(r"^projects/(?P.+?)$", path)
- return m.groupdict() if m else {}
-
- @staticmethod
- def common_location_path(project: str, location: str, ) -> str:
- """Returns a fully-qualified location string."""
- return "projects/{project}/locations/{location}".format(project=project, location=location, )
-
- @staticmethod
- def parse_common_location_path(path: str) -> Dict[str,str]:
- """Parse a location path into its component segments."""
- m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path)
- return m.groupdict() if m else {}
-
- def __init__(self, *,
- credentials: Optional[ga_credentials.Credentials] = None,
- transport: Union[str, WebRiskServiceV1Beta1Transport, None] = None,
- client_options: Optional[client_options_lib.ClientOptions] = None,
- client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
- ) -> None:
- """Instantiates the web risk service v1 beta1 client.
-
- Args:
- credentials (Optional[google.auth.credentials.Credentials]): The
- authorization credentials to attach to requests. These
- credentials identify the application to the service; if none
- are specified, the client will attempt to ascertain the
- credentials from the environment.
- transport (Union[str, WebRiskServiceV1Beta1Transport]): The
- transport to use. If set to None, a transport is chosen
- automatically.
- client_options (google.api_core.client_options.ClientOptions): Custom options for the
- client. It won't take effect if a ``transport`` instance is provided.
- (1) The ``api_endpoint`` property can be used to override the
- default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT
- environment variable can also be used to override the endpoint:
- "always" (always use the default mTLS endpoint), "never" (always
- use the default regular endpoint) and "auto" (auto switch to the
- default mTLS endpoint if client certificate is present, this is
- the default value). However, the ``api_endpoint`` property takes
- precedence if provided.
- (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable
- is "true", then the ``client_cert_source`` property can be used
- to provide client certificate for mutual TLS transport. If
- not provided, the default SSL client certificate will be used if
- present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not
- set, no client certificate will be used.
- client_info (google.api_core.gapic_v1.client_info.ClientInfo):
- The client info used to send a user-agent string along with
- API requests. If ``None``, then default info will be used.
- Generally, you only need to set this if you're developing
- your own client library.
-
- Raises:
- google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport
- creation failed for any reason.
- """
- if isinstance(client_options, dict):
- client_options = client_options_lib.from_dict(client_options)
- if client_options is None:
- client_options = client_options_lib.ClientOptions()
-
- # Create SSL credentials for mutual TLS if needed.
- use_client_cert = bool(util.strtobool(os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false")))
-
- client_cert_source_func = None
- is_mtls = False
- if use_client_cert:
- if client_options.client_cert_source:
- is_mtls = True
- client_cert_source_func = client_options.client_cert_source
- else:
- is_mtls = mtls.has_default_client_cert_source()
- if is_mtls:
- client_cert_source_func = mtls.default_client_cert_source()
- else:
- client_cert_source_func = None
-
- # Figure out which api endpoint to use.
- if client_options.api_endpoint is not None:
- api_endpoint = client_options.api_endpoint
- else:
- use_mtls_env = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto")
- if use_mtls_env == "never":
- api_endpoint = self.DEFAULT_ENDPOINT
- elif use_mtls_env == "always":
- api_endpoint = self.DEFAULT_MTLS_ENDPOINT
- elif use_mtls_env == "auto":
- if is_mtls:
- api_endpoint = self.DEFAULT_MTLS_ENDPOINT
- else:
- api_endpoint = self.DEFAULT_ENDPOINT
- else:
- raise MutualTLSChannelError(
- "Unsupported GOOGLE_API_USE_MTLS_ENDPOINT value. Accepted "
- "values: never, auto, always"
- )
-
- # Save or instantiate the transport.
- # Ordinarily, we provide the transport, but allowing a custom transport
- # instance provides an extensibility point for unusual situations.
- if isinstance(transport, WebRiskServiceV1Beta1Transport):
- # transport is a WebRiskServiceV1Beta1Transport instance.
- if credentials or client_options.credentials_file:
- raise ValueError("When providing a transport instance, "
- "provide its credentials directly.")
- if client_options.scopes:
- raise ValueError(
- "When providing a transport instance, provide its scopes "
- "directly."
- )
- self._transport = transport
- else:
- Transport = type(self).get_transport_class(transport)
- self._transport = Transport(
- credentials=credentials,
- credentials_file=client_options.credentials_file,
- host=api_endpoint,
- scopes=client_options.scopes,
- client_cert_source_for_mtls=client_cert_source_func,
- quota_project_id=client_options.quota_project_id,
- client_info=client_info,
- )
-
- def compute_threat_list_diff(self,
- request: webrisk.ComputeThreatListDiffRequest = None,
- *,
- threat_type: webrisk.ThreatType = None,
- version_token: bytes = None,
- constraints: webrisk.ComputeThreatListDiffRequest.Constraints = None,
- retry: retries.Retry = gapic_v1.method.DEFAULT,
- timeout: float = None,
- metadata: Sequence[Tuple[str, str]] = (),
- ) -> webrisk.ComputeThreatListDiffResponse:
- r"""Gets the most recent threat list diffs.
-
- Args:
- request (google.cloud.webrisk_v1beta1.types.ComputeThreatListDiffRequest):
- The request object. Describes an API diff request.
- threat_type (google.cloud.webrisk_v1beta1.types.ThreatType):
- The ThreatList to update.
- This corresponds to the ``threat_type`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- version_token (bytes):
- The current version token of the
- client for the requested list (the
- client version that was received from
- the last successful diff).
-
- This corresponds to the ``version_token`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- constraints (google.cloud.webrisk_v1beta1.types.ComputeThreatListDiffRequest.Constraints):
- Required. The constraints associated
- with this request.
-
- This corresponds to the ``constraints`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
- should be retried.
- timeout (float): The timeout for this request.
- metadata (Sequence[Tuple[str, str]]): Strings which should be
- sent along with the request as metadata.
-
- Returns:
- google.cloud.webrisk_v1beta1.types.ComputeThreatListDiffResponse:
-
- """
- # Create or coerce a protobuf request object.
- # Sanity check: If we got a request object, we should *not* have
- # gotten any keyword arguments that map to the request.
- has_flattened_params = any([threat_type, version_token, constraints])
- if request is not None and has_flattened_params:
- raise ValueError('If the `request` argument is set, then none of '
- 'the individual field arguments should be set.')
-
- # Minor optimization to avoid making a copy if the user passes
- # in a webrisk.ComputeThreatListDiffRequest.
- # There's no risk of modifying the input as we've already verified
- # there are no flattened fields.
- if not isinstance(request, webrisk.ComputeThreatListDiffRequest):
- request = webrisk.ComputeThreatListDiffRequest(request)
- # If we have keyword arguments corresponding to fields on the
- # request, apply these.
- if threat_type is not None:
- request.threat_type = threat_type
- if version_token is not None:
- request.version_token = version_token
- if constraints is not None:
- request.constraints = constraints
-
- # Wrap the RPC method; this adds retry and timeout information,
- # and friendly error handling.
- rpc = self._transport._wrapped_methods[self._transport.compute_threat_list_diff]
-
- # Send the request.
- response = rpc(
- request,
- retry=retry,
- timeout=timeout,
- metadata=metadata,
- )
-
- # Done; return the response.
- return response
-
- def search_uris(self,
- request: webrisk.SearchUrisRequest = None,
- *,
- uri: str = None,
- threat_types: Sequence[webrisk.ThreatType] = None,
- retry: retries.Retry = gapic_v1.method.DEFAULT,
- timeout: float = None,
- metadata: Sequence[Tuple[str, str]] = (),
- ) -> webrisk.SearchUrisResponse:
- r"""This method is used to check whether a URI is on a
- given threatList.
-
- Args:
- request (google.cloud.webrisk_v1beta1.types.SearchUrisRequest):
- The request object. Request to check URI entries against
- threatLists.
- uri (str):
- Required. The URI to be checked for
- matches.
-
- This corresponds to the ``uri`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- threat_types (Sequence[google.cloud.webrisk_v1beta1.types.ThreatType]):
- Required. The ThreatLists to search
- in.
-
- This corresponds to the ``threat_types`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
- should be retried.
- timeout (float): The timeout for this request.
- metadata (Sequence[Tuple[str, str]]): Strings which should be
- sent along with the request as metadata.
-
- Returns:
- google.cloud.webrisk_v1beta1.types.SearchUrisResponse:
-
- """
- # Create or coerce a protobuf request object.
- # Sanity check: If we got a request object, we should *not* have
- # gotten any keyword arguments that map to the request.
- has_flattened_params = any([uri, threat_types])
- if request is not None and has_flattened_params:
- raise ValueError('If the `request` argument is set, then none of '
- 'the individual field arguments should be set.')
-
- # Minor optimization to avoid making a copy if the user passes
- # in a webrisk.SearchUrisRequest.
- # There's no risk of modifying the input as we've already verified
- # there are no flattened fields.
- if not isinstance(request, webrisk.SearchUrisRequest):
- request = webrisk.SearchUrisRequest(request)
- # If we have keyword arguments corresponding to fields on the
- # request, apply these.
- if uri is not None:
- request.uri = uri
- if threat_types is not None:
- request.threat_types = threat_types
-
- # Wrap the RPC method; this adds retry and timeout information,
- # and friendly error handling.
- rpc = self._transport._wrapped_methods[self._transport.search_uris]
-
- # Send the request.
- response = rpc(
- request,
- retry=retry,
- timeout=timeout,
- metadata=metadata,
- )
-
- # Done; return the response.
- return response
-
- def search_hashes(self,
- request: webrisk.SearchHashesRequest = None,
- *,
- hash_prefix: bytes = None,
- threat_types: Sequence[webrisk.ThreatType] = None,
- retry: retries.Retry = gapic_v1.method.DEFAULT,
- timeout: float = None,
- metadata: Sequence[Tuple[str, str]] = (),
- ) -> webrisk.SearchHashesResponse:
- r"""Gets the full hashes that match the requested hash
- prefix. This is used after a hash prefix is looked up in
- a threatList and there is a match. The client side
- threatList only holds partial hashes so the client must
- query this method to determine if there is a full hash
- match of a threat.
-
- Args:
- request (google.cloud.webrisk_v1beta1.types.SearchHashesRequest):
- The request object. Request to return full hashes
- matched by the provided hash prefixes.
- hash_prefix (bytes):
- A hash prefix, consisting of the most
- significant 4-32 bytes of a SHA256 hash.
- For JSON requests, this field is
- base64-encoded.
-
- This corresponds to the ``hash_prefix`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- threat_types (Sequence[google.cloud.webrisk_v1beta1.types.ThreatType]):
- Required. The ThreatLists to search
- in.
-
- This corresponds to the ``threat_types`` field
- on the ``request`` instance; if ``request`` is provided, this
- should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
- should be retried.
- timeout (float): The timeout for this request.
- metadata (Sequence[Tuple[str, str]]): Strings which should be
- sent along with the request as metadata.
-
- Returns:
- google.cloud.webrisk_v1beta1.types.SearchHashesResponse:
-
- """
- # Create or coerce a protobuf request object.
- # Sanity check: If we got a request object, we should *not* have
- # gotten any keyword arguments that map to the request.
- has_flattened_params = any([hash_prefix, threat_types])
- if request is not None and has_flattened_params:
- raise ValueError('If the `request` argument is set, then none of '
- 'the individual field arguments should be set.')
-
- # Minor optimization to avoid making a copy if the user passes
- # in a webrisk.SearchHashesRequest.
- # There's no risk of modifying the input as we've already verified
- # there are no flattened fields.
- if not isinstance(request, webrisk.SearchHashesRequest):
- request = webrisk.SearchHashesRequest(request)
- # If we have keyword arguments corresponding to fields on the
- # request, apply these.
- if hash_prefix is not None:
- request.hash_prefix = hash_prefix
- if threat_types is not None:
- request.threat_types = threat_types
-
- # Wrap the RPC method; this adds retry and timeout information,
- # and friendly error handling.
- rpc = self._transport._wrapped_methods[self._transport.search_hashes]
-
- # Send the request.
- response = rpc(
- request,
- retry=retry,
- timeout=timeout,
- metadata=metadata,
- )
-
- # Done; return the response.
- return response
-
-
-
-
-
-try:
- DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(
- gapic_version=pkg_resources.get_distribution(
- "google-cloud-webrisk",
- ).version,
- )
-except pkg_resources.DistributionNotFound:
- DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo()
-
-
-__all__ = (
- "WebRiskServiceV1Beta1Client",
-)
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/__init__.py b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/__init__.py
deleted file mode 100644
index aaee65b..0000000
--- a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/__init__.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-from collections import OrderedDict
-from typing import Dict, Type
-
-from .base import WebRiskServiceV1Beta1Transport
-from .grpc import WebRiskServiceV1Beta1GrpcTransport
-from .grpc_asyncio import WebRiskServiceV1Beta1GrpcAsyncIOTransport
-
-
-# Compile a registry of transports.
-_transport_registry = OrderedDict() # type: Dict[str, Type[WebRiskServiceV1Beta1Transport]]
-_transport_registry['grpc'] = WebRiskServiceV1Beta1GrpcTransport
-_transport_registry['grpc_asyncio'] = WebRiskServiceV1Beta1GrpcAsyncIOTransport
-
-__all__ = (
- 'WebRiskServiceV1Beta1Transport',
- 'WebRiskServiceV1Beta1GrpcTransport',
- 'WebRiskServiceV1Beta1GrpcAsyncIOTransport',
-)
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/base.py b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/base.py
deleted file mode 100644
index 5edb5af..0000000
--- a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/base.py
+++ /dev/null
@@ -1,217 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-import abc
-from typing import Awaitable, Callable, Dict, Optional, Sequence, Union
-import packaging.version
-import pkg_resources
-
-import google.auth # type: ignore
-import google.api_core # type: ignore
-from google.api_core import exceptions as core_exceptions # type: ignore
-from google.api_core import gapic_v1 # type: ignore
-from google.api_core import retry as retries # type: ignore
-from google.auth import credentials as ga_credentials # type: ignore
-from google.oauth2 import service_account # type: ignore
-
-from google.cloud.webrisk_v1beta1.types import webrisk
-
-try:
- DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(
- gapic_version=pkg_resources.get_distribution(
- 'google-cloud-webrisk',
- ).version,
- )
-except pkg_resources.DistributionNotFound:
- DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo()
-
-try:
- # google.auth.__version__ was added in 1.26.0
- _GOOGLE_AUTH_VERSION = google.auth.__version__
-except AttributeError:
- try: # try pkg_resources if it is available
- _GOOGLE_AUTH_VERSION = pkg_resources.get_distribution("google-auth").version
- except pkg_resources.DistributionNotFound: # pragma: NO COVER
- _GOOGLE_AUTH_VERSION = None
-
-
-class WebRiskServiceV1Beta1Transport(abc.ABC):
- """Abstract transport class for WebRiskServiceV1Beta1."""
-
- AUTH_SCOPES = (
- 'https://www.googleapis.com/auth/cloud-platform',
- )
-
- DEFAULT_HOST: str = 'webrisk.googleapis.com'
- def __init__(
- self, *,
- host: str = DEFAULT_HOST,
- credentials: ga_credentials.Credentials = None,
- credentials_file: Optional[str] = None,
- scopes: Optional[Sequence[str]] = None,
- quota_project_id: Optional[str] = None,
- client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
- always_use_jwt_access: Optional[bool] = False,
- **kwargs,
- ) -> None:
- """Instantiate the transport.
-
- Args:
- host (Optional[str]):
- The hostname to connect to.
- credentials (Optional[google.auth.credentials.Credentials]): The
- authorization credentials to attach to requests. These
- credentials identify the application to the service; if none
- are specified, the client will attempt to ascertain the
- credentials from the environment.
- credentials_file (Optional[str]): A file with credentials that can
- be loaded with :func:`google.auth.load_credentials_from_file`.
- This argument is mutually exclusive with credentials.
- scopes (Optional[Sequence[str]]): A list of scopes.
- quota_project_id (Optional[str]): An optional project to use for billing
- and quota.
- client_info (google.api_core.gapic_v1.client_info.ClientInfo):
- The client info used to send a user-agent string along with
- API requests. If ``None``, then default info will be used.
- Generally, you only need to set this if you're developing
- your own client library.
- always_use_jwt_access (Optional[bool]): Whether self signed JWT should
- be used for service account credentials.
- """
- # Save the hostname. Default to port 443 (HTTPS) if none is specified.
- if ':' not in host:
- host += ':443'
- self._host = host
-
- scopes_kwargs = self._get_scopes_kwargs(self._host, scopes)
-
- # Save the scopes.
- self._scopes = scopes
-
- # If no credentials are provided, then determine the appropriate
- # defaults.
- if credentials and credentials_file:
- raise core_exceptions.DuplicateCredentialArgs("'credentials_file' and 'credentials' are mutually exclusive")
-
- if credentials_file is not None:
- credentials, _ = google.auth.load_credentials_from_file(
- credentials_file,
- **scopes_kwargs,
- quota_project_id=quota_project_id
- )
-
- elif credentials is None:
- credentials, _ = google.auth.default(**scopes_kwargs, quota_project_id=quota_project_id)
-
- # If the credentials is service account credentials, then always try to use self signed JWT.
- if always_use_jwt_access and isinstance(credentials, service_account.Credentials) and hasattr(service_account.Credentials, "with_always_use_jwt_access"):
- credentials = credentials.with_always_use_jwt_access(True)
-
- # Save the credentials.
- self._credentials = credentials
-
- # TODO(busunkim): This method is in the base transport
- # to avoid duplicating code across the transport classes. These functions
- # should be deleted once the minimum required versions of google-auth is increased.
-
- # TODO: Remove this function once google-auth >= 1.25.0 is required
- @classmethod
- def _get_scopes_kwargs(cls, host: str, scopes: Optional[Sequence[str]]) -> Dict[str, Optional[Sequence[str]]]:
- """Returns scopes kwargs to pass to google-auth methods depending on the google-auth version"""
-
- scopes_kwargs = {}
-
- if _GOOGLE_AUTH_VERSION and (
- packaging.version.parse(_GOOGLE_AUTH_VERSION)
- >= packaging.version.parse("1.25.0")
- ):
- scopes_kwargs = {"scopes": scopes, "default_scopes": cls.AUTH_SCOPES}
- else:
- scopes_kwargs = {"scopes": scopes or cls.AUTH_SCOPES}
-
- return scopes_kwargs
-
- def _prep_wrapped_messages(self, client_info):
- # Precompute the wrapped methods.
- self._wrapped_methods = {
- self.compute_threat_list_diff: gapic_v1.method.wrap_method(
- self.compute_threat_list_diff,
- default_retry=retries.Retry(
-initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
- core_exceptions.DeadlineExceeded,
- core_exceptions.ServiceUnavailable,
- ),
- deadline=600.0,
- ),
- default_timeout=600.0,
- client_info=client_info,
- ),
- self.search_uris: gapic_v1.method.wrap_method(
- self.search_uris,
- default_retry=retries.Retry(
-initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
- core_exceptions.DeadlineExceeded,
- core_exceptions.ServiceUnavailable,
- ),
- deadline=600.0,
- ),
- default_timeout=600.0,
- client_info=client_info,
- ),
- self.search_hashes: gapic_v1.method.wrap_method(
- self.search_hashes,
- default_retry=retries.Retry(
-initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type(
- core_exceptions.DeadlineExceeded,
- core_exceptions.ServiceUnavailable,
- ),
- deadline=600.0,
- ),
- default_timeout=600.0,
- client_info=client_info,
- ),
- }
-
- @property
- def compute_threat_list_diff(self) -> Callable[
- [webrisk.ComputeThreatListDiffRequest],
- Union[
- webrisk.ComputeThreatListDiffResponse,
- Awaitable[webrisk.ComputeThreatListDiffResponse]
- ]]:
- raise NotImplementedError()
-
- @property
- def search_uris(self) -> Callable[
- [webrisk.SearchUrisRequest],
- Union[
- webrisk.SearchUrisResponse,
- Awaitable[webrisk.SearchUrisResponse]
- ]]:
- raise NotImplementedError()
-
- @property
- def search_hashes(self) -> Callable[
- [webrisk.SearchHashesRequest],
- Union[
- webrisk.SearchHashesResponse,
- Awaitable[webrisk.SearchHashesResponse]
- ]]:
- raise NotImplementedError()
-
-
-__all__ = (
- 'WebRiskServiceV1Beta1Transport',
-)
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc.py b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc.py
deleted file mode 100644
index 207474a..0000000
--- a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc.py
+++ /dev/null
@@ -1,311 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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 warnings
-from typing import Callable, Dict, Optional, Sequence, Tuple, Union
-
-from google.api_core import grpc_helpers # type: ignore
-from google.api_core import gapic_v1 # type: ignore
-import google.auth # type: ignore
-from google.auth import credentials as ga_credentials # type: ignore
-from google.auth.transport.grpc import SslCredentials # type: ignore
-
-import grpc # type: ignore
-
-from google.cloud.webrisk_v1beta1.types import webrisk
-from .base import WebRiskServiceV1Beta1Transport, DEFAULT_CLIENT_INFO
-
-
-class WebRiskServiceV1Beta1GrpcTransport(WebRiskServiceV1Beta1Transport):
- """gRPC backend transport for WebRiskServiceV1Beta1.
-
- Web Risk v1beta1 API defines an interface to detect malicious
- URLs on your website and in client applications.
-
- This class defines the same methods as the primary client, so the
- primary client can load the underlying transport implementation
- and call it.
-
- It sends protocol buffers over the wire using gRPC (which is built on
- top of HTTP/2); the ``grpcio`` package must be installed.
- """
- _stubs: Dict[str, Callable]
-
- def __init__(self, *,
- host: str = 'webrisk.googleapis.com',
- credentials: ga_credentials.Credentials = None,
- credentials_file: str = None,
- scopes: Sequence[str] = None,
- channel: grpc.Channel = None,
- api_mtls_endpoint: str = None,
- client_cert_source: Callable[[], Tuple[bytes, bytes]] = None,
- ssl_channel_credentials: grpc.ChannelCredentials = None,
- client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None,
- quota_project_id: Optional[str] = None,
- client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
- always_use_jwt_access: Optional[bool] = False,
- ) -> None:
- """Instantiate the transport.
-
- Args:
- host (Optional[str]):
- The hostname to connect to.
- credentials (Optional[google.auth.credentials.Credentials]): The
- authorization credentials to attach to requests. These
- credentials identify the application to the service; if none
- are specified, the client will attempt to ascertain the
- credentials from the environment.
- This argument is ignored if ``channel`` is provided.
- credentials_file (Optional[str]): A file with credentials that can
- be loaded with :func:`google.auth.load_credentials_from_file`.
- This argument is ignored if ``channel`` is provided.
- scopes (Optional(Sequence[str])): A list of scopes. This argument is
- ignored if ``channel`` is provided.
- channel (Optional[grpc.Channel]): A ``Channel`` instance through
- which to make calls.
- api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint.
- If provided, it overrides the ``host`` argument and tries to create
- a mutual TLS channel with client SSL credentials from
- ``client_cert_source`` or applicatin default SSL credentials.
- client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]):
- Deprecated. A callback to provide client SSL certificate bytes and
- private key bytes, both in PEM format. It is ignored if
- ``api_mtls_endpoint`` is None.
- ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials
- for grpc channel. It is ignored if ``channel`` is provided.
- client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]):
- A callback to provide client certificate bytes and private key bytes,
- both in PEM format. It is used to configure mutual TLS channel. It is
- ignored if ``channel`` or ``ssl_channel_credentials`` is provided.
- quota_project_id (Optional[str]): An optional project to use for billing
- and quota.
- client_info (google.api_core.gapic_v1.client_info.ClientInfo):
- The client info used to send a user-agent string along with
- API requests. If ``None``, then default info will be used.
- Generally, you only need to set this if you're developing
- your own client library.
- always_use_jwt_access (Optional[bool]): Whether self signed JWT should
- be used for service account credentials.
-
- Raises:
- google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport
- creation failed for any reason.
- google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials``
- and ``credentials_file`` are passed.
- """
- self._grpc_channel = None
- self._ssl_channel_credentials = ssl_channel_credentials
- self._stubs: Dict[str, Callable] = {}
-
- if api_mtls_endpoint:
- warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning)
- if client_cert_source:
- warnings.warn("client_cert_source is deprecated", DeprecationWarning)
-
- if channel:
- # Ignore credentials if a channel was passed.
- credentials = False
- # If a channel was explicitly provided, set it.
- self._grpc_channel = channel
- self._ssl_channel_credentials = None
-
- else:
- if api_mtls_endpoint:
- host = api_mtls_endpoint
-
- # Create SSL credentials with client_cert_source or application
- # default SSL credentials.
- if client_cert_source:
- cert, key = client_cert_source()
- self._ssl_channel_credentials = grpc.ssl_channel_credentials(
- certificate_chain=cert, private_key=key
- )
- else:
- self._ssl_channel_credentials = SslCredentials().ssl_credentials
-
- else:
- if client_cert_source_for_mtls and not ssl_channel_credentials:
- cert, key = client_cert_source_for_mtls()
- self._ssl_channel_credentials = grpc.ssl_channel_credentials(
- certificate_chain=cert, private_key=key
- )
-
- # The base transport sets the host, credentials and scopes
- super().__init__(
- host=host,
- credentials=credentials,
- credentials_file=credentials_file,
- scopes=scopes,
- quota_project_id=quota_project_id,
- client_info=client_info,
- always_use_jwt_access=always_use_jwt_access,
- )
-
- if not self._grpc_channel:
- self._grpc_channel = type(self).create_channel(
- self._host,
- credentials=self._credentials,
- credentials_file=credentials_file,
- scopes=self._scopes,
- ssl_credentials=self._ssl_channel_credentials,
- quota_project_id=quota_project_id,
- options=[
- ("grpc.max_send_message_length", -1),
- ("grpc.max_receive_message_length", -1),
- ],
- )
-
- # Wrap messages. This must be done after self._grpc_channel exists
- self._prep_wrapped_messages(client_info)
-
- @classmethod
- def create_channel(cls,
- host: str = 'webrisk.googleapis.com',
- credentials: ga_credentials.Credentials = None,
- credentials_file: str = None,
- scopes: Optional[Sequence[str]] = None,
- quota_project_id: Optional[str] = None,
- **kwargs) -> grpc.Channel:
- """Create and return a gRPC channel object.
- Args:
- host (Optional[str]): The host for the channel to use.
- credentials (Optional[~.Credentials]): The
- authorization credentials to attach to requests. These
- credentials identify this application to the service. If
- none are specified, the client will attempt to ascertain
- the credentials from the environment.
- credentials_file (Optional[str]): A file with credentials that can
- be loaded with :func:`google.auth.load_credentials_from_file`.
- This argument is mutually exclusive with credentials.
- scopes (Optional[Sequence[str]]): A optional list of scopes needed for this
- service. These are only used when credentials are not specified and
- are passed to :func:`google.auth.default`.
- quota_project_id (Optional[str]): An optional project to use for billing
- and quota.
- kwargs (Optional[dict]): Keyword arguments, which are passed to the
- channel creation.
- Returns:
- grpc.Channel: A gRPC channel object.
-
- Raises:
- google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials``
- and ``credentials_file`` are passed.
- """
-
- return grpc_helpers.create_channel(
- host,
- credentials=credentials,
- credentials_file=credentials_file,
- quota_project_id=quota_project_id,
- default_scopes=cls.AUTH_SCOPES,
- scopes=scopes,
- default_host=cls.DEFAULT_HOST,
- **kwargs
- )
-
- @property
- def grpc_channel(self) -> grpc.Channel:
- """Return the channel designed to connect to this service.
- """
- return self._grpc_channel
-
- @property
- def compute_threat_list_diff(self) -> Callable[
- [webrisk.ComputeThreatListDiffRequest],
- webrisk.ComputeThreatListDiffResponse]:
- r"""Return a callable for the compute threat list diff method over gRPC.
-
- Gets the most recent threat list diffs.
-
- Returns:
- Callable[[~.ComputeThreatListDiffRequest],
- ~.ComputeThreatListDiffResponse]:
- A function that, when called, will call the underlying RPC
- on the server.
- """
- # Generate a "stub function" on-the-fly which will actually make
- # the request.
- # gRPC handles serialization and deserialization, so we just need
- # to pass in the functions for each.
- if 'compute_threat_list_diff' not in self._stubs:
- self._stubs['compute_threat_list_diff'] = self.grpc_channel.unary_unary(
- '/google.cloud.webrisk.v1beta1.WebRiskServiceV1Beta1/ComputeThreatListDiff',
- request_serializer=webrisk.ComputeThreatListDiffRequest.serialize,
- response_deserializer=webrisk.ComputeThreatListDiffResponse.deserialize,
- )
- return self._stubs['compute_threat_list_diff']
-
- @property
- def search_uris(self) -> Callable[
- [webrisk.SearchUrisRequest],
- webrisk.SearchUrisResponse]:
- r"""Return a callable for the search uris method over gRPC.
-
- This method is used to check whether a URI is on a
- given threatList.
-
- Returns:
- Callable[[~.SearchUrisRequest],
- ~.SearchUrisResponse]:
- A function that, when called, will call the underlying RPC
- on the server.
- """
- # Generate a "stub function" on-the-fly which will actually make
- # the request.
- # gRPC handles serialization and deserialization, so we just need
- # to pass in the functions for each.
- if 'search_uris' not in self._stubs:
- self._stubs['search_uris'] = self.grpc_channel.unary_unary(
- '/google.cloud.webrisk.v1beta1.WebRiskServiceV1Beta1/SearchUris',
- request_serializer=webrisk.SearchUrisRequest.serialize,
- response_deserializer=webrisk.SearchUrisResponse.deserialize,
- )
- return self._stubs['search_uris']
-
- @property
- def search_hashes(self) -> Callable[
- [webrisk.SearchHashesRequest],
- webrisk.SearchHashesResponse]:
- r"""Return a callable for the search hashes method over gRPC.
-
- Gets the full hashes that match the requested hash
- prefix. This is used after a hash prefix is looked up in
- a threatList and there is a match. The client side
- threatList only holds partial hashes so the client must
- query this method to determine if there is a full hash
- match of a threat.
-
- Returns:
- Callable[[~.SearchHashesRequest],
- ~.SearchHashesResponse]:
- A function that, when called, will call the underlying RPC
- on the server.
- """
- # Generate a "stub function" on-the-fly which will actually make
- # the request.
- # gRPC handles serialization and deserialization, so we just need
- # to pass in the functions for each.
- if 'search_hashes' not in self._stubs:
- self._stubs['search_hashes'] = self.grpc_channel.unary_unary(
- '/google.cloud.webrisk.v1beta1.WebRiskServiceV1Beta1/SearchHashes',
- request_serializer=webrisk.SearchHashesRequest.serialize,
- response_deserializer=webrisk.SearchHashesResponse.deserialize,
- )
- return self._stubs['search_hashes']
-
-
-__all__ = (
- 'WebRiskServiceV1Beta1GrpcTransport',
-)
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc_asyncio.py b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc_asyncio.py
deleted file mode 100644
index b078970..0000000
--- a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/grpc_asyncio.py
+++ /dev/null
@@ -1,315 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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 warnings
-from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union
-
-from google.api_core import gapic_v1 # type: ignore
-from google.api_core import grpc_helpers_async # type: ignore
-from google.auth import credentials as ga_credentials # type: ignore
-from google.auth.transport.grpc import SslCredentials # type: ignore
-import packaging.version
-
-import grpc # type: ignore
-from grpc.experimental import aio # type: ignore
-
-from google.cloud.webrisk_v1beta1.types import webrisk
-from .base import WebRiskServiceV1Beta1Transport, DEFAULT_CLIENT_INFO
-from .grpc import WebRiskServiceV1Beta1GrpcTransport
-
-
-class WebRiskServiceV1Beta1GrpcAsyncIOTransport(WebRiskServiceV1Beta1Transport):
- """gRPC AsyncIO backend transport for WebRiskServiceV1Beta1.
-
- Web Risk v1beta1 API defines an interface to detect malicious
- URLs on your website and in client applications.
-
- This class defines the same methods as the primary client, so the
- primary client can load the underlying transport implementation
- and call it.
-
- It sends protocol buffers over the wire using gRPC (which is built on
- top of HTTP/2); the ``grpcio`` package must be installed.
- """
-
- _grpc_channel: aio.Channel
- _stubs: Dict[str, Callable] = {}
-
- @classmethod
- def create_channel(cls,
- host: str = 'webrisk.googleapis.com',
- credentials: ga_credentials.Credentials = None,
- credentials_file: Optional[str] = None,
- scopes: Optional[Sequence[str]] = None,
- quota_project_id: Optional[str] = None,
- **kwargs) -> aio.Channel:
- """Create and return a gRPC AsyncIO channel object.
- Args:
- host (Optional[str]): The host for the channel to use.
- credentials (Optional[~.Credentials]): The
- authorization credentials to attach to requests. These
- credentials identify this application to the service. If
- none are specified, the client will attempt to ascertain
- the credentials from the environment.
- credentials_file (Optional[str]): A file with credentials that can
- be loaded with :func:`google.auth.load_credentials_from_file`.
- This argument is ignored if ``channel`` is provided.
- scopes (Optional[Sequence[str]]): A optional list of scopes needed for this
- service. These are only used when credentials are not specified and
- are passed to :func:`google.auth.default`.
- quota_project_id (Optional[str]): An optional project to use for billing
- and quota.
- kwargs (Optional[dict]): Keyword arguments, which are passed to the
- channel creation.
- Returns:
- aio.Channel: A gRPC AsyncIO channel object.
- """
-
- return grpc_helpers_async.create_channel(
- host,
- credentials=credentials,
- credentials_file=credentials_file,
- quota_project_id=quota_project_id,
- default_scopes=cls.AUTH_SCOPES,
- scopes=scopes,
- default_host=cls.DEFAULT_HOST,
- **kwargs
- )
-
- def __init__(self, *,
- host: str = 'webrisk.googleapis.com',
- credentials: ga_credentials.Credentials = None,
- credentials_file: Optional[str] = None,
- scopes: Optional[Sequence[str]] = None,
- channel: aio.Channel = None,
- api_mtls_endpoint: str = None,
- client_cert_source: Callable[[], Tuple[bytes, bytes]] = None,
- ssl_channel_credentials: grpc.ChannelCredentials = None,
- client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None,
- quota_project_id=None,
- client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO,
- always_use_jwt_access: Optional[bool] = False,
- ) -> None:
- """Instantiate the transport.
-
- Args:
- host (Optional[str]):
- The hostname to connect to.
- credentials (Optional[google.auth.credentials.Credentials]): The
- authorization credentials to attach to requests. These
- credentials identify the application to the service; if none
- are specified, the client will attempt to ascertain the
- credentials from the environment.
- This argument is ignored if ``channel`` is provided.
- credentials_file (Optional[str]): A file with credentials that can
- be loaded with :func:`google.auth.load_credentials_from_file`.
- This argument is ignored if ``channel`` is provided.
- scopes (Optional[Sequence[str]]): A optional list of scopes needed for this
- service. These are only used when credentials are not specified and
- are passed to :func:`google.auth.default`.
- channel (Optional[aio.Channel]): A ``Channel`` instance through
- which to make calls.
- api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint.
- If provided, it overrides the ``host`` argument and tries to create
- a mutual TLS channel with client SSL credentials from
- ``client_cert_source`` or applicatin default SSL credentials.
- client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]):
- Deprecated. A callback to provide client SSL certificate bytes and
- private key bytes, both in PEM format. It is ignored if
- ``api_mtls_endpoint`` is None.
- ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials
- for grpc channel. It is ignored if ``channel`` is provided.
- client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]):
- A callback to provide client certificate bytes and private key bytes,
- both in PEM format. It is used to configure mutual TLS channel. It is
- ignored if ``channel`` or ``ssl_channel_credentials`` is provided.
- quota_project_id (Optional[str]): An optional project to use for billing
- and quota.
- client_info (google.api_core.gapic_v1.client_info.ClientInfo):
- The client info used to send a user-agent string along with
- API requests. If ``None``, then default info will be used.
- Generally, you only need to set this if you're developing
- your own client library.
- always_use_jwt_access (Optional[bool]): Whether self signed JWT should
- be used for service account credentials.
-
- Raises:
- google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport
- creation failed for any reason.
- google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials``
- and ``credentials_file`` are passed.
- """
- self._grpc_channel = None
- self._ssl_channel_credentials = ssl_channel_credentials
- self._stubs: Dict[str, Callable] = {}
-
- if api_mtls_endpoint:
- warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning)
- if client_cert_source:
- warnings.warn("client_cert_source is deprecated", DeprecationWarning)
-
- if channel:
- # Ignore credentials if a channel was passed.
- credentials = False
- # If a channel was explicitly provided, set it.
- self._grpc_channel = channel
- self._ssl_channel_credentials = None
- else:
- if api_mtls_endpoint:
- host = api_mtls_endpoint
-
- # Create SSL credentials with client_cert_source or application
- # default SSL credentials.
- if client_cert_source:
- cert, key = client_cert_source()
- self._ssl_channel_credentials = grpc.ssl_channel_credentials(
- certificate_chain=cert, private_key=key
- )
- else:
- self._ssl_channel_credentials = SslCredentials().ssl_credentials
-
- else:
- if client_cert_source_for_mtls and not ssl_channel_credentials:
- cert, key = client_cert_source_for_mtls()
- self._ssl_channel_credentials = grpc.ssl_channel_credentials(
- certificate_chain=cert, private_key=key
- )
-
- # The base transport sets the host, credentials and scopes
- super().__init__(
- host=host,
- credentials=credentials,
- credentials_file=credentials_file,
- scopes=scopes,
- quota_project_id=quota_project_id,
- client_info=client_info,
- always_use_jwt_access=always_use_jwt_access,
- )
-
- if not self._grpc_channel:
- self._grpc_channel = type(self).create_channel(
- self._host,
- credentials=self._credentials,
- credentials_file=credentials_file,
- scopes=self._scopes,
- ssl_credentials=self._ssl_channel_credentials,
- quota_project_id=quota_project_id,
- options=[
- ("grpc.max_send_message_length", -1),
- ("grpc.max_receive_message_length", -1),
- ],
- )
-
- # Wrap messages. This must be done after self._grpc_channel exists
- self._prep_wrapped_messages(client_info)
-
- @property
- def grpc_channel(self) -> aio.Channel:
- """Create the channel designed to connect to this service.
-
- This property caches on the instance; repeated calls return
- the same channel.
- """
- # Return the channel from cache.
- return self._grpc_channel
-
- @property
- def compute_threat_list_diff(self) -> Callable[
- [webrisk.ComputeThreatListDiffRequest],
- Awaitable[webrisk.ComputeThreatListDiffResponse]]:
- r"""Return a callable for the compute threat list diff method over gRPC.
-
- Gets the most recent threat list diffs.
-
- Returns:
- Callable[[~.ComputeThreatListDiffRequest],
- Awaitable[~.ComputeThreatListDiffResponse]]:
- A function that, when called, will call the underlying RPC
- on the server.
- """
- # Generate a "stub function" on-the-fly which will actually make
- # the request.
- # gRPC handles serialization and deserialization, so we just need
- # to pass in the functions for each.
- if 'compute_threat_list_diff' not in self._stubs:
- self._stubs['compute_threat_list_diff'] = self.grpc_channel.unary_unary(
- '/google.cloud.webrisk.v1beta1.WebRiskServiceV1Beta1/ComputeThreatListDiff',
- request_serializer=webrisk.ComputeThreatListDiffRequest.serialize,
- response_deserializer=webrisk.ComputeThreatListDiffResponse.deserialize,
- )
- return self._stubs['compute_threat_list_diff']
-
- @property
- def search_uris(self) -> Callable[
- [webrisk.SearchUrisRequest],
- Awaitable[webrisk.SearchUrisResponse]]:
- r"""Return a callable for the search uris method over gRPC.
-
- This method is used to check whether a URI is on a
- given threatList.
-
- Returns:
- Callable[[~.SearchUrisRequest],
- Awaitable[~.SearchUrisResponse]]:
- A function that, when called, will call the underlying RPC
- on the server.
- """
- # Generate a "stub function" on-the-fly which will actually make
- # the request.
- # gRPC handles serialization and deserialization, so we just need
- # to pass in the functions for each.
- if 'search_uris' not in self._stubs:
- self._stubs['search_uris'] = self.grpc_channel.unary_unary(
- '/google.cloud.webrisk.v1beta1.WebRiskServiceV1Beta1/SearchUris',
- request_serializer=webrisk.SearchUrisRequest.serialize,
- response_deserializer=webrisk.SearchUrisResponse.deserialize,
- )
- return self._stubs['search_uris']
-
- @property
- def search_hashes(self) -> Callable[
- [webrisk.SearchHashesRequest],
- Awaitable[webrisk.SearchHashesResponse]]:
- r"""Return a callable for the search hashes method over gRPC.
-
- Gets the full hashes that match the requested hash
- prefix. This is used after a hash prefix is looked up in
- a threatList and there is a match. The client side
- threatList only holds partial hashes so the client must
- query this method to determine if there is a full hash
- match of a threat.
-
- Returns:
- Callable[[~.SearchHashesRequest],
- Awaitable[~.SearchHashesResponse]]:
- A function that, when called, will call the underlying RPC
- on the server.
- """
- # Generate a "stub function" on-the-fly which will actually make
- # the request.
- # gRPC handles serialization and deserialization, so we just need
- # to pass in the functions for each.
- if 'search_hashes' not in self._stubs:
- self._stubs['search_hashes'] = self.grpc_channel.unary_unary(
- '/google.cloud.webrisk.v1beta1.WebRiskServiceV1Beta1/SearchHashes',
- request_serializer=webrisk.SearchHashesRequest.serialize,
- response_deserializer=webrisk.SearchHashesResponse.deserialize,
- )
- return self._stubs['search_hashes']
-
-
-__all__ = (
- 'WebRiskServiceV1Beta1GrpcAsyncIOTransport',
-)
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/types/__init__.py b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/types/__init__.py
deleted file mode 100644
index 215caf4..0000000
--- a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/types/__init__.py
+++ /dev/null
@@ -1,46 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-from .webrisk import (
- ComputeThreatListDiffRequest,
- ComputeThreatListDiffResponse,
- RawHashes,
- RawIndices,
- RiceDeltaEncoding,
- SearchHashesRequest,
- SearchHashesResponse,
- SearchUrisRequest,
- SearchUrisResponse,
- ThreatEntryAdditions,
- ThreatEntryRemovals,
- CompressionType,
- ThreatType,
-)
-
-__all__ = (
- 'ComputeThreatListDiffRequest',
- 'ComputeThreatListDiffResponse',
- 'RawHashes',
- 'RawIndices',
- 'RiceDeltaEncoding',
- 'SearchHashesRequest',
- 'SearchHashesResponse',
- 'SearchUrisRequest',
- 'SearchUrisResponse',
- 'ThreatEntryAdditions',
- 'ThreatEntryRemovals',
- 'CompressionType',
- 'ThreatType',
-)
diff --git a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/types/webrisk.py b/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/types/webrisk.py
deleted file mode 100644
index 4f4ec51..0000000
--- a/owl-bot-staging/v1beta1/google/cloud/webrisk_v1beta1/types/webrisk.py
+++ /dev/null
@@ -1,478 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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 proto # type: ignore
-
-from google.protobuf import timestamp_pb2 # type: ignore
-
-
-__protobuf__ = proto.module(
- package='google.cloud.webrisk.v1beta1',
- manifest={
- 'ThreatType',
- 'CompressionType',
- 'ComputeThreatListDiffRequest',
- 'ComputeThreatListDiffResponse',
- 'SearchUrisRequest',
- 'SearchUrisResponse',
- 'SearchHashesRequest',
- 'SearchHashesResponse',
- 'ThreatEntryAdditions',
- 'ThreatEntryRemovals',
- 'RawIndices',
- 'RawHashes',
- 'RiceDeltaEncoding',
- },
-)
-
-
-class ThreatType(proto.Enum):
- r"""The type of threat. This maps dirrectly to the threat list a
- threat may belong to.
- """
- THREAT_TYPE_UNSPECIFIED = 0
- MALWARE = 1
- SOCIAL_ENGINEERING = 2
- UNWANTED_SOFTWARE = 3
-
-
-class CompressionType(proto.Enum):
- r"""The ways in which threat entry sets can be compressed."""
- COMPRESSION_TYPE_UNSPECIFIED = 0
- RAW = 1
- RICE = 2
-
-
-class ComputeThreatListDiffRequest(proto.Message):
- r"""Describes an API diff request.
- Attributes:
- threat_type (google.cloud.webrisk_v1beta1.types.ThreatType):
- The ThreatList to update.
- version_token (bytes):
- The current version token of the client for
- the requested list (the client version that was
- received from the last successful diff).
- constraints (google.cloud.webrisk_v1beta1.types.ComputeThreatListDiffRequest.Constraints):
- Required. The constraints associated with
- this request.
- """
-
- class Constraints(proto.Message):
- r"""The constraints for this diff.
- Attributes:
- max_diff_entries (int):
- The maximum size in number of entries. The diff will not
- contain more entries than this value. This should be a power
- of 2 between 2\ **10 and 2**\ 20. If zero, no diff size
- limit is set.
- max_database_entries (int):
- Sets the maximum number of entries that the client is
- willing to have in the local database. This should be a
- power of 2 between 2\ **10 and 2**\ 20. If zero, no database
- size limit is set.
- supported_compressions (Sequence[google.cloud.webrisk_v1beta1.types.CompressionType]):
- The compression types supported by the
- client.
- """
-
- max_diff_entries = proto.Field(
- proto.INT32,
- number=1,
- )
- max_database_entries = proto.Field(
- proto.INT32,
- number=2,
- )
- supported_compressions = proto.RepeatedField(
- proto.ENUM,
- number=3,
- enum='CompressionType',
- )
-
- threat_type = proto.Field(
- proto.ENUM,
- number=1,
- enum='ThreatType',
- )
- version_token = proto.Field(
- proto.BYTES,
- number=2,
- )
- constraints = proto.Field(
- proto.MESSAGE,
- number=3,
- message=Constraints,
- )
-
-
-class ComputeThreatListDiffResponse(proto.Message):
- r"""
- Attributes:
- response_type (google.cloud.webrisk_v1beta1.types.ComputeThreatListDiffResponse.ResponseType):
- The type of response. This may indicate that
- an action must be taken by the client when the
- response is received.
- additions (google.cloud.webrisk_v1beta1.types.ThreatEntryAdditions):
- A set of entries to add to a local threat
- type's list.
- removals (google.cloud.webrisk_v1beta1.types.ThreatEntryRemovals):
- A set of entries to remove from a local
- threat type's list. This field may be empty.
- new_version_token (bytes):
- The new opaque client version token.
- checksum (google.cloud.webrisk_v1beta1.types.ComputeThreatListDiffResponse.Checksum):
- The expected SHA256 hash of the client state;
- that is, of the sorted list of all hashes
- present in the database after applying the
- provided diff. If the client state doesn't match
- the expected state, the client must disregard
- this diff and retry later.
- recommended_next_diff (google.protobuf.timestamp_pb2.Timestamp):
- The soonest the client should wait before
- issuing any diff request. Querying sooner is
- unlikely to produce a meaningful diff. Waiting
- longer is acceptable considering the use case.
- If this field is not set clients may update as
- soon as they want.
- """
- class ResponseType(proto.Enum):
- r"""The type of response sent to the client."""
- RESPONSE_TYPE_UNSPECIFIED = 0
- DIFF = 1
- RESET = 2
-
- class Checksum(proto.Message):
- r"""The expected state of a client's local database.
- Attributes:
- sha256 (bytes):
- The SHA256 hash of the client state; that is,
- of the sorted list of all hashes present in the
- database.
- """
-
- sha256 = proto.Field(
- proto.BYTES,
- number=1,
- )
-
- response_type = proto.Field(
- proto.ENUM,
- number=4,
- enum=ResponseType,
- )
- additions = proto.Field(
- proto.MESSAGE,
- number=5,
- message='ThreatEntryAdditions',
- )
- removals = proto.Field(
- proto.MESSAGE,
- number=6,
- message='ThreatEntryRemovals',
- )
- new_version_token = proto.Field(
- proto.BYTES,
- number=7,
- )
- checksum = proto.Field(
- proto.MESSAGE,
- number=8,
- message=Checksum,
- )
- recommended_next_diff = proto.Field(
- proto.MESSAGE,
- number=2,
- message=timestamp_pb2.Timestamp,
- )
-
-
-class SearchUrisRequest(proto.Message):
- r"""Request to check URI entries against threatLists.
- Attributes:
- uri (str):
- Required. The URI to be checked for matches.
- threat_types (Sequence[google.cloud.webrisk_v1beta1.types.ThreatType]):
- Required. The ThreatLists to search in.
- """
-
- uri = proto.Field(
- proto.STRING,
- number=1,
- )
- threat_types = proto.RepeatedField(
- proto.ENUM,
- number=2,
- enum='ThreatType',
- )
-
-
-class SearchUrisResponse(proto.Message):
- r"""
- Attributes:
- threat (google.cloud.webrisk_v1beta1.types.SearchUrisResponse.ThreatUri):
- The threat list matches. This may be empty if
- the URI is on no list.
- """
-
- class ThreatUri(proto.Message):
- r"""Contains threat information on a matching uri.
- Attributes:
- threat_types (Sequence[google.cloud.webrisk_v1beta1.types.ThreatType]):
- The ThreatList this threat belongs to.
- expire_time (google.protobuf.timestamp_pb2.Timestamp):
- The cache lifetime for the returned match.
- Clients must not cache this response past this
- timestamp to avoid false positives.
- """
-
- threat_types = proto.RepeatedField(
- proto.ENUM,
- number=1,
- enum='ThreatType',
- )
- expire_time = proto.Field(
- proto.MESSAGE,
- number=2,
- message=timestamp_pb2.Timestamp,
- )
-
- threat = proto.Field(
- proto.MESSAGE,
- number=1,
- message=ThreatUri,
- )
-
-
-class SearchHashesRequest(proto.Message):
- r"""Request to return full hashes matched by the provided hash
- prefixes.
-
- Attributes:
- hash_prefix (bytes):
- A hash prefix, consisting of the most
- significant 4-32 bytes of a SHA256 hash. For
- JSON requests, this field is base64-encoded.
- threat_types (Sequence[google.cloud.webrisk_v1beta1.types.ThreatType]):
- Required. The ThreatLists to search in.
- """
-
- hash_prefix = proto.Field(
- proto.BYTES,
- number=1,
- )
- threat_types = proto.RepeatedField(
- proto.ENUM,
- number=2,
- enum='ThreatType',
- )
-
-
-class SearchHashesResponse(proto.Message):
- r"""
- Attributes:
- threats (Sequence[google.cloud.webrisk_v1beta1.types.SearchHashesResponse.ThreatHash]):
- The full hashes that matched the requested
- prefixes. The hash will be populated in the key.
- negative_expire_time (google.protobuf.timestamp_pb2.Timestamp):
- For requested entities that did not match the
- threat list, how long to cache the response
- until.
- """
-
- class ThreatHash(proto.Message):
- r"""Contains threat information on a matching hash.
- Attributes:
- threat_types (Sequence[google.cloud.webrisk_v1beta1.types.ThreatType]):
- The ThreatList this threat belongs to.
- This must contain at least one entry.
- hash_ (bytes):
- A 32 byte SHA256 hash. This field is in
- binary format. For JSON requests, hashes are
- base64-encoded.
- expire_time (google.protobuf.timestamp_pb2.Timestamp):
- The cache lifetime for the returned match.
- Clients must not cache this response past this
- timestamp to avoid false positives.
- """
-
- threat_types = proto.RepeatedField(
- proto.ENUM,
- number=1,
- enum='ThreatType',
- )
- hash_ = proto.Field(
- proto.BYTES,
- number=2,
- )
- expire_time = proto.Field(
- proto.MESSAGE,
- number=3,
- message=timestamp_pb2.Timestamp,
- )
-
- threats = proto.RepeatedField(
- proto.MESSAGE,
- number=1,
- message=ThreatHash,
- )
- negative_expire_time = proto.Field(
- proto.MESSAGE,
- number=2,
- message=timestamp_pb2.Timestamp,
- )
-
-
-class ThreatEntryAdditions(proto.Message):
- r"""Contains the set of entries to add to a local database.
- May contain a combination of compressed and raw data in a single
- response.
-
- Attributes:
- raw_hashes (Sequence[google.cloud.webrisk_v1beta1.types.RawHashes]):
- The raw SHA256-formatted entries.
- Repeated to allow returning sets of hashes with
- different prefix sizes.
- rice_hashes (google.cloud.webrisk_v1beta1.types.RiceDeltaEncoding):
- The encoded 4-byte prefixes of SHA256-formatted entries,
- using a Golomb-Rice encoding. The hashes are converted to
- uint32, sorted in ascending order, then delta encoded and
- stored as encoded_data.
- """
-
- raw_hashes = proto.RepeatedField(
- proto.MESSAGE,
- number=1,
- message='RawHashes',
- )
- rice_hashes = proto.Field(
- proto.MESSAGE,
- number=2,
- message='RiceDeltaEncoding',
- )
-
-
-class ThreatEntryRemovals(proto.Message):
- r"""Contains the set of entries to remove from a local database.
- Attributes:
- raw_indices (google.cloud.webrisk_v1beta1.types.RawIndices):
- The raw removal indices for a local list.
- rice_indices (google.cloud.webrisk_v1beta1.types.RiceDeltaEncoding):
- The encoded local, lexicographically-sorted list indices,
- using a Golomb-Rice encoding. Used for sending compressed
- removal indices. The removal indices (uint32) are sorted in
- ascending order, then delta encoded and stored as
- encoded_data.
- """
-
- raw_indices = proto.Field(
- proto.MESSAGE,
- number=1,
- message='RawIndices',
- )
- rice_indices = proto.Field(
- proto.MESSAGE,
- number=2,
- message='RiceDeltaEncoding',
- )
-
-
-class RawIndices(proto.Message):
- r"""A set of raw indices to remove from a local list.
- Attributes:
- indices (Sequence[int]):
- The indices to remove from a
- lexicographically-sorted local list.
- """
-
- indices = proto.RepeatedField(
- proto.INT32,
- number=1,
- )
-
-
-class RawHashes(proto.Message):
- r"""The uncompressed threat entries in hash format.
- Hashes can be anywhere from 4 to 32 bytes in size. A large
- majority are 4 bytes, but some hashes are lengthened if they
- collide with the hash of a popular URI.
-
- Used for sending ThreatEntryAdditons to clients that do not
- support compression, or when sending non-4-byte hashes to
- clients that do support compression.
-
- Attributes:
- prefix_size (int):
- The number of bytes for each prefix encoded
- below. This field can be anywhere from 4
- (shortest prefix) to 32 (full SHA256 hash).
- raw_hashes (bytes):
- The hashes, in binary format, concatenated
- into one long string. Hashes are sorted in
- lexicographic order. For JSON API users, hashes
- are base64-encoded.
- """
-
- prefix_size = proto.Field(
- proto.INT32,
- number=1,
- )
- raw_hashes = proto.Field(
- proto.BYTES,
- number=2,
- )
-
-
-class RiceDeltaEncoding(proto.Message):
- r"""The Rice-Golomb encoded data. Used for sending compressed
- 4-byte hashes or compressed removal indices.
-
- Attributes:
- first_value (int):
- The offset of the first entry in the encoded
- data, or, if only a single integer was encoded,
- that single integer's value. If the field is
- empty or missing, assume zero.
- rice_parameter (int):
- The Golomb-Rice parameter, which is a number between 2 and
- 28. This field is missing (that is, zero) if ``num_entries``
- is zero.
- entry_count (int):
- The number of entries that are delta encoded in the encoded
- data. If only a single integer was encoded, this will be
- zero and the single value will be stored in ``first_value``.
- encoded_data (bytes):
- The encoded deltas that are encoded using the
- Golomb-Rice coder.
- """
-
- first_value = proto.Field(
- proto.INT64,
- number=1,
- )
- rice_parameter = proto.Field(
- proto.INT32,
- number=2,
- )
- entry_count = proto.Field(
- proto.INT32,
- number=3,
- )
- encoded_data = proto.Field(
- proto.BYTES,
- number=4,
- )
-
-
-__all__ = tuple(sorted(__protobuf__.manifest))
diff --git a/owl-bot-staging/v1beta1/mypy.ini b/owl-bot-staging/v1beta1/mypy.ini
deleted file mode 100644
index 4505b48..0000000
--- a/owl-bot-staging/v1beta1/mypy.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[mypy]
-python_version = 3.6
-namespace_packages = True
diff --git a/owl-bot-staging/v1beta1/noxfile.py b/owl-bot-staging/v1beta1/noxfile.py
deleted file mode 100644
index 73504b6..0000000
--- a/owl-bot-staging/v1beta1/noxfile.py
+++ /dev/null
@@ -1,132 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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 pathlib
-import shutil
-import subprocess
-import sys
-
-
-import nox # type: ignore
-
-CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute()
-
-LOWER_BOUND_CONSTRAINTS_FILE = CURRENT_DIRECTORY / "constraints.txt"
-PACKAGE_NAME = subprocess.check_output([sys.executable, "setup.py", "--name"], encoding="utf-8")
-
-
-nox.sessions = [
- "unit",
- "cover",
- "mypy",
- "check_lower_bounds"
- # exclude update_lower_bounds from default
- "docs",
-]
-
-@nox.session(python=['3.6', '3.7', '3.8', '3.9'])
-def unit(session):
- """Run the unit test suite."""
-
- session.install('coverage', 'pytest', 'pytest-cov', 'asyncmock', 'pytest-asyncio')
- session.install('-e', '.')
-
- session.run(
- 'py.test',
- '--quiet',
- '--cov=google/cloud/webrisk_v1beta1/',
- '--cov-config=.coveragerc',
- '--cov-report=term',
- '--cov-report=html',
- os.path.join('tests', 'unit', ''.join(session.posargs))
- )
-
-
-@nox.session(python='3.7')
-def cover(session):
- """Run the final coverage report.
- This outputs the coverage report aggregating coverage from the unit
- test runs (not system test runs), and then erases coverage data.
- """
- session.install("coverage", "pytest-cov")
- session.run("coverage", "report", "--show-missing", "--fail-under=100")
-
- session.run("coverage", "erase")
-
-
-@nox.session(python=['3.6', '3.7'])
-def mypy(session):
- """Run the type checker."""
- session.install('mypy', 'types-pkg_resources')
- session.install('.')
- session.run(
- 'mypy',
- '--explicit-package-bases',
- 'google',
- )
-
-
-@nox.session
-def update_lower_bounds(session):
- """Update lower bounds in constraints.txt to match setup.py"""
- session.install('google-cloud-testutils')
- session.install('.')
-
- session.run(
- 'lower-bound-checker',
- 'update',
- '--package-name',
- PACKAGE_NAME,
- '--constraints-file',
- str(LOWER_BOUND_CONSTRAINTS_FILE),
- )
-
-
-@nox.session
-def check_lower_bounds(session):
- """Check lower bounds in setup.py are reflected in constraints file"""
- session.install('google-cloud-testutils')
- session.install('.')
-
- session.run(
- 'lower-bound-checker',
- 'check',
- '--package-name',
- PACKAGE_NAME,
- '--constraints-file',
- str(LOWER_BOUND_CONSTRAINTS_FILE),
- )
-
-@nox.session(python='3.6')
-def docs(session):
- """Build the docs for this library."""
-
- session.install("-e", ".")
- session.install("sphinx<3.0.0", "alabaster", "recommonmark")
-
- shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True)
- session.run(
- "sphinx-build",
- "-W", # warnings as errors
- "-T", # show full traceback on exception
- "-N", # no colors
- "-b",
- "html",
- "-d",
- os.path.join("docs", "_build", "doctrees", ""),
- os.path.join("docs", ""),
- os.path.join("docs", "_build", "html", ""),
- )
diff --git a/owl-bot-staging/v1beta1/scripts/fixup_webrisk_v1beta1_keywords.py b/owl-bot-staging/v1beta1/scripts/fixup_webrisk_v1beta1_keywords.py
deleted file mode 100644
index 4b1391c..0000000
--- a/owl-bot-staging/v1beta1/scripts/fixup_webrisk_v1beta1_keywords.py
+++ /dev/null
@@ -1,178 +0,0 @@
-#! /usr/bin/env python3
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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 argparse
-import os
-import libcst as cst
-import pathlib
-import sys
-from typing import (Any, Callable, Dict, List, Sequence, Tuple)
-
-
-def partition(
- predicate: Callable[[Any], bool],
- iterator: Sequence[Any]
-) -> Tuple[List[Any], List[Any]]:
- """A stable, out-of-place partition."""
- results = ([], [])
-
- for i in iterator:
- results[int(predicate(i))].append(i)
-
- # Returns trueList, falseList
- return results[1], results[0]
-
-
-class webriskCallTransformer(cst.CSTTransformer):
- CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata')
- METHOD_TO_PARAMS: Dict[str, Tuple[str]] = {
- 'compute_threat_list_diff': ('threat_type', 'constraints', 'version_token', ),
- 'search_hashes': ('threat_types', 'hash_prefix', ),
- 'search_uris': ('uri', 'threat_types', ),
- }
-
- def leave_Call(self, original: cst.Call, updated: cst.Call) -> cst.CSTNode:
- try:
- key = original.func.attr.value
- kword_params = self.METHOD_TO_PARAMS[key]
- except (AttributeError, KeyError):
- # Either not a method from the API or too convoluted to be sure.
- return updated
-
- # If the existing code is valid, keyword args come after positional args.
- # Therefore, all positional args must map to the first parameters.
- args, kwargs = partition(lambda a: not bool(a.keyword), updated.args)
- if any(k.keyword.value == "request" for k in kwargs):
- # We've already fixed this file, don't fix it again.
- return updated
-
- kwargs, ctrl_kwargs = partition(
- lambda a: not a.keyword.value in self.CTRL_PARAMS,
- kwargs
- )
-
- args, ctrl_args = args[:len(kword_params)], args[len(kword_params):]
- ctrl_kwargs.extend(cst.Arg(value=a.value, keyword=cst.Name(value=ctrl))
- for a, ctrl in zip(ctrl_args, self.CTRL_PARAMS))
-
- request_arg = cst.Arg(
- value=cst.Dict([
- cst.DictElement(
- cst.SimpleString("'{}'".format(name)),
-cst.Element(value=arg.value)
- )
- # Note: the args + kwargs looks silly, but keep in mind that
- # the control parameters had to be stripped out, and that
- # those could have been passed positionally or by keyword.
- for name, arg in zip(kword_params, args + kwargs)]),
- keyword=cst.Name("request")
- )
-
- return updated.with_changes(
- args=[request_arg] + ctrl_kwargs
- )
-
-
-def fix_files(
- in_dir: pathlib.Path,
- out_dir: pathlib.Path,
- *,
- transformer=webriskCallTransformer(),
-):
- """Duplicate the input dir to the output dir, fixing file method calls.
-
- Preconditions:
- * in_dir is a real directory
- * out_dir is a real, empty directory
- """
- pyfile_gen = (
- pathlib.Path(os.path.join(root, f))
- for root, _, files in os.walk(in_dir)
- for f in files if os.path.splitext(f)[1] == ".py"
- )
-
- for fpath in pyfile_gen:
- with open(fpath, 'r') as f:
- src = f.read()
-
- # Parse the code and insert method call fixes.
- tree = cst.parse_module(src)
- updated = tree.visit(transformer)
-
- # Create the path and directory structure for the new file.
- updated_path = out_dir.joinpath(fpath.relative_to(in_dir))
- updated_path.parent.mkdir(parents=True, exist_ok=True)
-
- # Generate the updated source file at the corresponding path.
- with open(updated_path, 'w') as f:
- f.write(updated.code)
-
-
-if __name__ == '__main__':
- parser = argparse.ArgumentParser(
- description="""Fix up source that uses the webrisk client library.
-
-The existing sources are NOT overwritten but are copied to output_dir with changes made.
-
-Note: This tool operates at a best-effort level at converting positional
- parameters in client method calls to keyword based parameters.
- Cases where it WILL FAIL include
- A) * or ** expansion in a method call.
- B) Calls via function or method alias (includes free function calls)
- C) Indirect or dispatched calls (e.g. the method is looked up dynamically)
-
- These all constitute false negatives. The tool will also detect false
- positives when an API method shares a name with another method.
-""")
- parser.add_argument(
- '-d',
- '--input-directory',
- required=True,
- dest='input_dir',
- help='the input directory to walk for python files to fix up',
- )
- parser.add_argument(
- '-o',
- '--output-directory',
- required=True,
- dest='output_dir',
- help='the directory to output files fixed via un-flattening',
- )
- args = parser.parse_args()
- input_dir = pathlib.Path(args.input_dir)
- output_dir = pathlib.Path(args.output_dir)
- if not input_dir.is_dir():
- print(
- f"input directory '{input_dir}' does not exist or is not a directory",
- file=sys.stderr,
- )
- sys.exit(-1)
-
- if not output_dir.is_dir():
- print(
- f"output directory '{output_dir}' does not exist or is not a directory",
- file=sys.stderr,
- )
- sys.exit(-1)
-
- if os.listdir(output_dir):
- print(
- f"output directory '{output_dir}' is not empty",
- file=sys.stderr,
- )
- sys.exit(-1)
-
- fix_files(input_dir, output_dir)
diff --git a/owl-bot-staging/v1beta1/setup.py b/owl-bot-staging/v1beta1/setup.py
deleted file mode 100644
index de54b53..0000000
--- a/owl-bot-staging/v1beta1/setup.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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 io
-import os
-import setuptools # type: ignore
-
-version = '0.1.0'
-
-package_root = os.path.abspath(os.path.dirname(__file__))
-
-readme_filename = os.path.join(package_root, 'README.rst')
-with io.open(readme_filename, encoding='utf-8') as readme_file:
- readme = readme_file.read()
-
-setuptools.setup(
- name='google-cloud-webrisk',
- version=version,
- long_description=readme,
- packages=setuptools.PEP420PackageFinder.find(),
- namespace_packages=('google', 'google.cloud'),
- platforms='Posix; MacOS X; Windows',
- include_package_data=True,
- install_requires=(
- 'google-api-core[grpc] >= 1.27.0, < 2.0.0dev',
- 'libcst >= 0.2.5',
- 'proto-plus >= 1.15.0',
- 'packaging >= 14.3', ),
- python_requires='>=3.6',
- classifiers=[
- 'Development Status :: 3 - Alpha',
- 'Intended Audience :: Developers',
- 'Operating System :: OS Independent',
- 'Programming Language :: Python :: 3.6',
- 'Programming Language :: Python :: 3.7',
- 'Programming Language :: Python :: 3.8',
- 'Topic :: Internet',
- 'Topic :: Software Development :: Libraries :: Python Modules',
- ],
- zip_safe=False,
-)
diff --git a/owl-bot-staging/v1beta1/tests/__init__.py b/owl-bot-staging/v1beta1/tests/__init__.py
deleted file mode 100644
index b54a5fc..0000000
--- a/owl-bot-staging/v1beta1/tests/__init__.py
+++ /dev/null
@@ -1,16 +0,0 @@
-
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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/owl-bot-staging/v1beta1/tests/unit/__init__.py b/owl-bot-staging/v1beta1/tests/unit/__init__.py
deleted file mode 100644
index b54a5fc..0000000
--- a/owl-bot-staging/v1beta1/tests/unit/__init__.py
+++ /dev/null
@@ -1,16 +0,0 @@
-
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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/owl-bot-staging/v1beta1/tests/unit/gapic/__init__.py b/owl-bot-staging/v1beta1/tests/unit/gapic/__init__.py
deleted file mode 100644
index b54a5fc..0000000
--- a/owl-bot-staging/v1beta1/tests/unit/gapic/__init__.py
+++ /dev/null
@@ -1,16 +0,0 @@
-
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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/owl-bot-staging/v1beta1/tests/unit/gapic/webrisk_v1beta1/__init__.py b/owl-bot-staging/v1beta1/tests/unit/gapic/webrisk_v1beta1/__init__.py
deleted file mode 100644
index b54a5fc..0000000
--- a/owl-bot-staging/v1beta1/tests/unit/gapic/webrisk_v1beta1/__init__.py
+++ /dev/null
@@ -1,16 +0,0 @@
-
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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/owl-bot-staging/v1beta1/tests/unit/gapic/webrisk_v1beta1/test_web_risk_service_v1_beta1.py b/owl-bot-staging/v1beta1/tests/unit/gapic/webrisk_v1beta1/test_web_risk_service_v1_beta1.py
deleted file mode 100644
index 203d0f9..0000000
--- a/owl-bot-staging/v1beta1/tests/unit/gapic/webrisk_v1beta1/test_web_risk_service_v1_beta1.py
+++ /dev/null
@@ -1,1437 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# 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 mock
-import packaging.version
-
-import grpc
-from grpc.experimental import aio
-import math
-import pytest
-from proto.marshal.rules.dates import DurationRule, TimestampRule
-
-
-from google.api_core import client_options
-from google.api_core import exceptions as core_exceptions
-from google.api_core import gapic_v1
-from google.api_core import grpc_helpers
-from google.api_core import grpc_helpers_async
-from google.auth import credentials as ga_credentials
-from google.auth.exceptions import MutualTLSChannelError
-from google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1 import WebRiskServiceV1Beta1AsyncClient
-from google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1 import WebRiskServiceV1Beta1Client
-from google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1 import transports
-from google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1.transports.base import _GOOGLE_AUTH_VERSION
-from google.cloud.webrisk_v1beta1.types import webrisk
-from google.oauth2 import service_account
-from google.protobuf import timestamp_pb2 # type: ignore
-import google.auth
-
-
-# TODO(busunkim): Once google-auth >= 1.25.0 is required transitively
-# through google-api-core:
-# - Delete the auth "less than" test cases
-# - Delete these pytest markers (Make the "greater than or equal to" tests the default).
-requires_google_auth_lt_1_25_0 = pytest.mark.skipif(
- packaging.version.parse(_GOOGLE_AUTH_VERSION) >= packaging.version.parse("1.25.0"),
- reason="This test requires google-auth < 1.25.0",
-)
-requires_google_auth_gte_1_25_0 = pytest.mark.skipif(
- packaging.version.parse(_GOOGLE_AUTH_VERSION) < packaging.version.parse("1.25.0"),
- reason="This test requires google-auth >= 1.25.0",
-)
-
-def client_cert_source_callback():
- return b"cert bytes", b"key bytes"
-
-
-# If default endpoint is localhost, then default mtls endpoint will be the same.
-# This method modifies the default endpoint so the client can produce a different
-# mtls endpoint for endpoint testing purposes.
-def modify_default_endpoint(client):
- return "foo.googleapis.com" if ("localhost" in client.DEFAULT_ENDPOINT) else client.DEFAULT_ENDPOINT
-
-
-def test__get_default_mtls_endpoint():
- api_endpoint = "example.googleapis.com"
- api_mtls_endpoint = "example.mtls.googleapis.com"
- sandbox_endpoint = "example.sandbox.googleapis.com"
- sandbox_mtls_endpoint = "example.mtls.sandbox.googleapis.com"
- non_googleapi = "api.example.com"
-
- assert WebRiskServiceV1Beta1Client._get_default_mtls_endpoint(None) is None
- assert WebRiskServiceV1Beta1Client._get_default_mtls_endpoint(api_endpoint) == api_mtls_endpoint
- assert WebRiskServiceV1Beta1Client._get_default_mtls_endpoint(api_mtls_endpoint) == api_mtls_endpoint
- assert WebRiskServiceV1Beta1Client._get_default_mtls_endpoint(sandbox_endpoint) == sandbox_mtls_endpoint
- assert WebRiskServiceV1Beta1Client._get_default_mtls_endpoint(sandbox_mtls_endpoint) == sandbox_mtls_endpoint
- assert WebRiskServiceV1Beta1Client._get_default_mtls_endpoint(non_googleapi) == non_googleapi
-
-
-@pytest.mark.parametrize("client_class", [
- WebRiskServiceV1Beta1Client,
- WebRiskServiceV1Beta1AsyncClient,
-])
-def test_web_risk_service_v1_beta1_client_from_service_account_info(client_class):
- creds = ga_credentials.AnonymousCredentials()
- with mock.patch.object(service_account.Credentials, 'from_service_account_info') as factory:
- factory.return_value = creds
- info = {"valid": True}
- client = client_class.from_service_account_info(info)
- assert client.transport._credentials == creds
- assert isinstance(client, client_class)
-
- assert client.transport._host == 'webrisk.googleapis.com:443'
-
-
-@pytest.mark.parametrize("client_class", [
- WebRiskServiceV1Beta1Client,
- WebRiskServiceV1Beta1AsyncClient,
-])
-def test_web_risk_service_v1_beta1_client_service_account_always_use_jwt(client_class):
- with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt:
- creds = service_account.Credentials(None, None, None)
- client = client_class(credentials=creds)
- use_jwt.assert_not_called()
-
-
-@pytest.mark.parametrize("transport_class,transport_name", [
- (transports.WebRiskServiceV1Beta1GrpcTransport, "grpc"),
- (transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport, "grpc_asyncio"),
-])
-def test_web_risk_service_v1_beta1_client_service_account_always_use_jwt_true(transport_class, transport_name):
- with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt:
- creds = service_account.Credentials(None, None, None)
- transport = transport_class(credentials=creds, always_use_jwt_access=True)
- use_jwt.assert_called_once_with(True)
-
-
-@pytest.mark.parametrize("client_class", [
- WebRiskServiceV1Beta1Client,
- WebRiskServiceV1Beta1AsyncClient,
-])
-def test_web_risk_service_v1_beta1_client_from_service_account_file(client_class):
- creds = ga_credentials.AnonymousCredentials()
- with mock.patch.object(service_account.Credentials, 'from_service_account_file') as factory:
- factory.return_value = creds
- client = client_class.from_service_account_file("dummy/file/path.json")
- assert client.transport._credentials == creds
- assert isinstance(client, client_class)
-
- client = client_class.from_service_account_json("dummy/file/path.json")
- assert client.transport._credentials == creds
- assert isinstance(client, client_class)
-
- assert client.transport._host == 'webrisk.googleapis.com:443'
-
-
-def test_web_risk_service_v1_beta1_client_get_transport_class():
- transport = WebRiskServiceV1Beta1Client.get_transport_class()
- available_transports = [
- transports.WebRiskServiceV1Beta1GrpcTransport,
- ]
- assert transport in available_transports
-
- transport = WebRiskServiceV1Beta1Client.get_transport_class("grpc")
- assert transport == transports.WebRiskServiceV1Beta1GrpcTransport
-
-
-@pytest.mark.parametrize("client_class,transport_class,transport_name", [
- (WebRiskServiceV1Beta1Client, transports.WebRiskServiceV1Beta1GrpcTransport, "grpc"),
- (WebRiskServiceV1Beta1AsyncClient, transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport, "grpc_asyncio"),
-])
-@mock.patch.object(WebRiskServiceV1Beta1Client, "DEFAULT_ENDPOINT", modify_default_endpoint(WebRiskServiceV1Beta1Client))
-@mock.patch.object(WebRiskServiceV1Beta1AsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(WebRiskServiceV1Beta1AsyncClient))
-def test_web_risk_service_v1_beta1_client_client_options(client_class, transport_class, transport_name):
- # Check that if channel is provided we won't create a new one.
- with mock.patch.object(WebRiskServiceV1Beta1Client, 'get_transport_class') as gtc:
- transport = transport_class(
- credentials=ga_credentials.AnonymousCredentials()
- )
- client = client_class(transport=transport)
- gtc.assert_not_called()
-
- # Check that if channel is provided via str we will create a new one.
- with mock.patch.object(WebRiskServiceV1Beta1Client, 'get_transport_class') as gtc:
- client = client_class(transport=transport_name)
- gtc.assert_called()
-
- # Check the case api_endpoint is provided.
- options = client_options.ClientOptions(api_endpoint="squid.clam.whelk")
- with mock.patch.object(transport_class, '__init__') as patched:
- patched.return_value = None
- client = client_class(client_options=options)
- patched.assert_called_once_with(
- credentials=None,
- credentials_file=None,
- host="squid.clam.whelk",
- scopes=None,
- client_cert_source_for_mtls=None,
- quota_project_id=None,
- client_info=transports.base.DEFAULT_CLIENT_INFO,
- )
-
- # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is
- # "never".
- with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}):
- with mock.patch.object(transport_class, '__init__') as patched:
- patched.return_value = None
- client = client_class()
- patched.assert_called_once_with(
- credentials=None,
- credentials_file=None,
- host=client.DEFAULT_ENDPOINT,
- scopes=None,
- client_cert_source_for_mtls=None,
- quota_project_id=None,
- client_info=transports.base.DEFAULT_CLIENT_INFO,
- )
-
- # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is
- # "always".
- with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}):
- with mock.patch.object(transport_class, '__init__') as patched:
- patched.return_value = None
- client = client_class()
- patched.assert_called_once_with(
- credentials=None,
- credentials_file=None,
- host=client.DEFAULT_MTLS_ENDPOINT,
- scopes=None,
- client_cert_source_for_mtls=None,
- quota_project_id=None,
- client_info=transports.base.DEFAULT_CLIENT_INFO,
- )
-
- # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has
- # unsupported value.
- with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}):
- with pytest.raises(MutualTLSChannelError):
- client = client_class()
-
- # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value.
- with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"}):
- with pytest.raises(ValueError):
- client = client_class()
-
- # Check the case quota_project_id is provided
- options = client_options.ClientOptions(quota_project_id="octopus")
- with mock.patch.object(transport_class, '__init__') as patched:
- patched.return_value = None
- client = client_class(client_options=options)
- patched.assert_called_once_with(
- credentials=None,
- credentials_file=None,
- host=client.DEFAULT_ENDPOINT,
- scopes=None,
- client_cert_source_for_mtls=None,
- quota_project_id="octopus",
- client_info=transports.base.DEFAULT_CLIENT_INFO,
- )
-
-@pytest.mark.parametrize("client_class,transport_class,transport_name,use_client_cert_env", [
- (WebRiskServiceV1Beta1Client, transports.WebRiskServiceV1Beta1GrpcTransport, "grpc", "true"),
- (WebRiskServiceV1Beta1AsyncClient, transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport, "grpc_asyncio", "true"),
- (WebRiskServiceV1Beta1Client, transports.WebRiskServiceV1Beta1GrpcTransport, "grpc", "false"),
- (WebRiskServiceV1Beta1AsyncClient, transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport, "grpc_asyncio", "false"),
-])
-@mock.patch.object(WebRiskServiceV1Beta1Client, "DEFAULT_ENDPOINT", modify_default_endpoint(WebRiskServiceV1Beta1Client))
-@mock.patch.object(WebRiskServiceV1Beta1AsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(WebRiskServiceV1Beta1AsyncClient))
-@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"})
-def test_web_risk_service_v1_beta1_client_mtls_env_auto(client_class, transport_class, transport_name, use_client_cert_env):
- # This tests the endpoint autoswitch behavior. Endpoint is autoswitched to the default
- # mtls endpoint, if GOOGLE_API_USE_CLIENT_CERTIFICATE is "true" and client cert exists.
-
- # Check the case client_cert_source is provided. Whether client cert is used depends on
- # GOOGLE_API_USE_CLIENT_CERTIFICATE value.
- with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}):
- options = client_options.ClientOptions(client_cert_source=client_cert_source_callback)
- with mock.patch.object(transport_class, '__init__') as patched:
- patched.return_value = None
- client = client_class(client_options=options)
-
- if use_client_cert_env == "false":
- expected_client_cert_source = None
- expected_host = client.DEFAULT_ENDPOINT
- else:
- expected_client_cert_source = client_cert_source_callback
- expected_host = client.DEFAULT_MTLS_ENDPOINT
-
- patched.assert_called_once_with(
- credentials=None,
- credentials_file=None,
- host=expected_host,
- scopes=None,
- client_cert_source_for_mtls=expected_client_cert_source,
- quota_project_id=None,
- client_info=transports.base.DEFAULT_CLIENT_INFO,
- )
-
- # Check the case ADC client cert is provided. Whether client cert is used depends on
- # GOOGLE_API_USE_CLIENT_CERTIFICATE value.
- with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}):
- with mock.patch.object(transport_class, '__init__') as patched:
- with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=True):
- with mock.patch('google.auth.transport.mtls.default_client_cert_source', return_value=client_cert_source_callback):
- if use_client_cert_env == "false":
- expected_host = client.DEFAULT_ENDPOINT
- expected_client_cert_source = None
- else:
- expected_host = client.DEFAULT_MTLS_ENDPOINT
- expected_client_cert_source = client_cert_source_callback
-
- patched.return_value = None
- client = client_class()
- patched.assert_called_once_with(
- credentials=None,
- credentials_file=None,
- host=expected_host,
- scopes=None,
- client_cert_source_for_mtls=expected_client_cert_source,
- quota_project_id=None,
- client_info=transports.base.DEFAULT_CLIENT_INFO,
- )
-
- # Check the case client_cert_source and ADC client cert are not provided.
- with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}):
- with mock.patch.object(transport_class, '__init__') as patched:
- with mock.patch("google.auth.transport.mtls.has_default_client_cert_source", return_value=False):
- patched.return_value = None
- client = client_class()
- patched.assert_called_once_with(
- credentials=None,
- credentials_file=None,
- host=client.DEFAULT_ENDPOINT,
- scopes=None,
- client_cert_source_for_mtls=None,
- quota_project_id=None,
- client_info=transports.base.DEFAULT_CLIENT_INFO,
- )
-
-
-@pytest.mark.parametrize("client_class,transport_class,transport_name", [
- (WebRiskServiceV1Beta1Client, transports.WebRiskServiceV1Beta1GrpcTransport, "grpc"),
- (WebRiskServiceV1Beta1AsyncClient, transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport, "grpc_asyncio"),
-])
-def test_web_risk_service_v1_beta1_client_client_options_scopes(client_class, transport_class, transport_name):
- # Check the case scopes are provided.
- options = client_options.ClientOptions(
- scopes=["1", "2"],
- )
- with mock.patch.object(transport_class, '__init__') as patched:
- patched.return_value = None
- client = client_class(client_options=options)
- patched.assert_called_once_with(
- credentials=None,
- credentials_file=None,
- host=client.DEFAULT_ENDPOINT,
- scopes=["1", "2"],
- client_cert_source_for_mtls=None,
- quota_project_id=None,
- client_info=transports.base.DEFAULT_CLIENT_INFO,
- )
-
-@pytest.mark.parametrize("client_class,transport_class,transport_name", [
- (WebRiskServiceV1Beta1Client, transports.WebRiskServiceV1Beta1GrpcTransport, "grpc"),
- (WebRiskServiceV1Beta1AsyncClient, transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport, "grpc_asyncio"),
-])
-def test_web_risk_service_v1_beta1_client_client_options_credentials_file(client_class, transport_class, transport_name):
- # Check the case credentials file is provided.
- options = client_options.ClientOptions(
- credentials_file="credentials.json"
- )
- with mock.patch.object(transport_class, '__init__') as patched:
- patched.return_value = None
- client = client_class(client_options=options)
- patched.assert_called_once_with(
- credentials=None,
- credentials_file="credentials.json",
- host=client.DEFAULT_ENDPOINT,
- scopes=None,
- client_cert_source_for_mtls=None,
- quota_project_id=None,
- client_info=transports.base.DEFAULT_CLIENT_INFO,
- )
-
-
-def test_web_risk_service_v1_beta1_client_client_options_from_dict():
- with mock.patch('google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1.transports.WebRiskServiceV1Beta1GrpcTransport.__init__') as grpc_transport:
- grpc_transport.return_value = None
- client = WebRiskServiceV1Beta1Client(
- client_options={'api_endpoint': 'squid.clam.whelk'}
- )
- grpc_transport.assert_called_once_with(
- credentials=None,
- credentials_file=None,
- host="squid.clam.whelk",
- scopes=None,
- client_cert_source_for_mtls=None,
- quota_project_id=None,
- client_info=transports.base.DEFAULT_CLIENT_INFO,
- )
-
-
-def test_compute_threat_list_diff(transport: str = 'grpc', request_type=webrisk.ComputeThreatListDiffRequest):
- client = WebRiskServiceV1Beta1Client(
- credentials=ga_credentials.AnonymousCredentials(),
- transport=transport,
- )
-
- # Everything is optional in proto3 as far as the runtime is concerned,
- # and we are mocking out the actual API, so just send an empty request.
- request = request_type()
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.compute_threat_list_diff),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value = webrisk.ComputeThreatListDiffResponse(
- response_type=webrisk.ComputeThreatListDiffResponse.ResponseType.DIFF,
- new_version_token=b'new_version_token_blob',
- )
- response = client.compute_threat_list_diff(request)
-
- # Establish that the underlying gRPC stub method was called.
- assert len(call.mock_calls) == 1
- _, args, _ = call.mock_calls[0]
- assert args[0] == webrisk.ComputeThreatListDiffRequest()
-
- # Establish that the response is the type that we expect.
- assert isinstance(response, webrisk.ComputeThreatListDiffResponse)
- assert response.response_type == webrisk.ComputeThreatListDiffResponse.ResponseType.DIFF
- assert response.new_version_token == b'new_version_token_blob'
-
-
-def test_compute_threat_list_diff_from_dict():
- test_compute_threat_list_diff(request_type=dict)
-
-
-def test_compute_threat_list_diff_empty_call():
- # This test is a coverage failsafe to make sure that totally empty calls,
- # i.e. request == None and no flattened fields passed, work.
- client = WebRiskServiceV1Beta1Client(
- credentials=ga_credentials.AnonymousCredentials(),
- transport='grpc',
- )
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.compute_threat_list_diff),
- '__call__') as call:
- client.compute_threat_list_diff()
- call.assert_called()
- _, args, _ = call.mock_calls[0]
- assert args[0] == webrisk.ComputeThreatListDiffRequest()
-
-
-@pytest.mark.asyncio
-async def test_compute_threat_list_diff_async(transport: str = 'grpc_asyncio', request_type=webrisk.ComputeThreatListDiffRequest):
- client = WebRiskServiceV1Beta1AsyncClient(
- credentials=ga_credentials.AnonymousCredentials(),
- transport=transport,
- )
-
- # Everything is optional in proto3 as far as the runtime is concerned,
- # and we are mocking out the actual API, so just send an empty request.
- request = request_type()
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.compute_threat_list_diff),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(webrisk.ComputeThreatListDiffResponse(
- response_type=webrisk.ComputeThreatListDiffResponse.ResponseType.DIFF,
- new_version_token=b'new_version_token_blob',
- ))
- response = await client.compute_threat_list_diff(request)
-
- # Establish that the underlying gRPC stub method was called.
- assert len(call.mock_calls)
- _, args, _ = call.mock_calls[0]
- assert args[0] == webrisk.ComputeThreatListDiffRequest()
-
- # Establish that the response is the type that we expect.
- assert isinstance(response, webrisk.ComputeThreatListDiffResponse)
- assert response.response_type == webrisk.ComputeThreatListDiffResponse.ResponseType.DIFF
- assert response.new_version_token == b'new_version_token_blob'
-
-
-@pytest.mark.asyncio
-async def test_compute_threat_list_diff_async_from_dict():
- await test_compute_threat_list_diff_async(request_type=dict)
-
-
-def test_compute_threat_list_diff_flattened():
- client = WebRiskServiceV1Beta1Client(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.compute_threat_list_diff),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value = webrisk.ComputeThreatListDiffResponse()
- # Call the method with a truthy value for each flattened field,
- # using the keyword arguments to the method.
- client.compute_threat_list_diff(
- threat_type=webrisk.ThreatType.MALWARE,
- version_token=b'version_token_blob',
- constraints=webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687),
- )
-
- # Establish that the underlying call was made with the expected
- # request object values.
- assert len(call.mock_calls) == 1
- _, args, _ = call.mock_calls[0]
- assert args[0].threat_type == webrisk.ThreatType.MALWARE
- assert args[0].version_token == b'version_token_blob'
- assert args[0].constraints == webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687)
-
-
-def test_compute_threat_list_diff_flattened_error():
- client = WebRiskServiceV1Beta1Client(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Attempting to call a method with both a request object and flattened
- # fields is an error.
- with pytest.raises(ValueError):
- client.compute_threat_list_diff(
- webrisk.ComputeThreatListDiffRequest(),
- threat_type=webrisk.ThreatType.MALWARE,
- version_token=b'version_token_blob',
- constraints=webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687),
- )
-
-
-@pytest.mark.asyncio
-async def test_compute_threat_list_diff_flattened_async():
- client = WebRiskServiceV1Beta1AsyncClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.compute_threat_list_diff),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value = webrisk.ComputeThreatListDiffResponse()
-
- call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(webrisk.ComputeThreatListDiffResponse())
- # Call the method with a truthy value for each flattened field,
- # using the keyword arguments to the method.
- response = await client.compute_threat_list_diff(
- threat_type=webrisk.ThreatType.MALWARE,
- version_token=b'version_token_blob',
- constraints=webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687),
- )
-
- # Establish that the underlying call was made with the expected
- # request object values.
- assert len(call.mock_calls)
- _, args, _ = call.mock_calls[0]
- assert args[0].threat_type == webrisk.ThreatType.MALWARE
- assert args[0].version_token == b'version_token_blob'
- assert args[0].constraints == webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687)
-
-
-@pytest.mark.asyncio
-async def test_compute_threat_list_diff_flattened_error_async():
- client = WebRiskServiceV1Beta1AsyncClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Attempting to call a method with both a request object and flattened
- # fields is an error.
- with pytest.raises(ValueError):
- await client.compute_threat_list_diff(
- webrisk.ComputeThreatListDiffRequest(),
- threat_type=webrisk.ThreatType.MALWARE,
- version_token=b'version_token_blob',
- constraints=webrisk.ComputeThreatListDiffRequest.Constraints(max_diff_entries=1687),
- )
-
-
-def test_search_uris(transport: str = 'grpc', request_type=webrisk.SearchUrisRequest):
- client = WebRiskServiceV1Beta1Client(
- credentials=ga_credentials.AnonymousCredentials(),
- transport=transport,
- )
-
- # Everything is optional in proto3 as far as the runtime is concerned,
- # and we are mocking out the actual API, so just send an empty request.
- request = request_type()
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.search_uris),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value = webrisk.SearchUrisResponse(
- )
- response = client.search_uris(request)
-
- # Establish that the underlying gRPC stub method was called.
- assert len(call.mock_calls) == 1
- _, args, _ = call.mock_calls[0]
- assert args[0] == webrisk.SearchUrisRequest()
-
- # Establish that the response is the type that we expect.
- assert isinstance(response, webrisk.SearchUrisResponse)
-
-
-def test_search_uris_from_dict():
- test_search_uris(request_type=dict)
-
-
-def test_search_uris_empty_call():
- # This test is a coverage failsafe to make sure that totally empty calls,
- # i.e. request == None and no flattened fields passed, work.
- client = WebRiskServiceV1Beta1Client(
- credentials=ga_credentials.AnonymousCredentials(),
- transport='grpc',
- )
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.search_uris),
- '__call__') as call:
- client.search_uris()
- call.assert_called()
- _, args, _ = call.mock_calls[0]
- assert args[0] == webrisk.SearchUrisRequest()
-
-
-@pytest.mark.asyncio
-async def test_search_uris_async(transport: str = 'grpc_asyncio', request_type=webrisk.SearchUrisRequest):
- client = WebRiskServiceV1Beta1AsyncClient(
- credentials=ga_credentials.AnonymousCredentials(),
- transport=transport,
- )
-
- # Everything is optional in proto3 as far as the runtime is concerned,
- # and we are mocking out the actual API, so just send an empty request.
- request = request_type()
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.search_uris),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(webrisk.SearchUrisResponse(
- ))
- response = await client.search_uris(request)
-
- # Establish that the underlying gRPC stub method was called.
- assert len(call.mock_calls)
- _, args, _ = call.mock_calls[0]
- assert args[0] == webrisk.SearchUrisRequest()
-
- # Establish that the response is the type that we expect.
- assert isinstance(response, webrisk.SearchUrisResponse)
-
-
-@pytest.mark.asyncio
-async def test_search_uris_async_from_dict():
- await test_search_uris_async(request_type=dict)
-
-
-def test_search_uris_flattened():
- client = WebRiskServiceV1Beta1Client(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.search_uris),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value = webrisk.SearchUrisResponse()
- # Call the method with a truthy value for each flattened field,
- # using the keyword arguments to the method.
- client.search_uris(
- uri='uri_value',
- threat_types=[webrisk.ThreatType.MALWARE],
- )
-
- # Establish that the underlying call was made with the expected
- # request object values.
- assert len(call.mock_calls) == 1
- _, args, _ = call.mock_calls[0]
- assert args[0].uri == 'uri_value'
- assert args[0].threat_types == [webrisk.ThreatType.MALWARE]
-
-
-def test_search_uris_flattened_error():
- client = WebRiskServiceV1Beta1Client(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Attempting to call a method with both a request object and flattened
- # fields is an error.
- with pytest.raises(ValueError):
- client.search_uris(
- webrisk.SearchUrisRequest(),
- uri='uri_value',
- threat_types=[webrisk.ThreatType.MALWARE],
- )
-
-
-@pytest.mark.asyncio
-async def test_search_uris_flattened_async():
- client = WebRiskServiceV1Beta1AsyncClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.search_uris),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value = webrisk.SearchUrisResponse()
-
- call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(webrisk.SearchUrisResponse())
- # Call the method with a truthy value for each flattened field,
- # using the keyword arguments to the method.
- response = await client.search_uris(
- uri='uri_value',
- threat_types=[webrisk.ThreatType.MALWARE],
- )
-
- # Establish that the underlying call was made with the expected
- # request object values.
- assert len(call.mock_calls)
- _, args, _ = call.mock_calls[0]
- assert args[0].uri == 'uri_value'
- assert args[0].threat_types == [webrisk.ThreatType.MALWARE]
-
-
-@pytest.mark.asyncio
-async def test_search_uris_flattened_error_async():
- client = WebRiskServiceV1Beta1AsyncClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Attempting to call a method with both a request object and flattened
- # fields is an error.
- with pytest.raises(ValueError):
- await client.search_uris(
- webrisk.SearchUrisRequest(),
- uri='uri_value',
- threat_types=[webrisk.ThreatType.MALWARE],
- )
-
-
-def test_search_hashes(transport: str = 'grpc', request_type=webrisk.SearchHashesRequest):
- client = WebRiskServiceV1Beta1Client(
- credentials=ga_credentials.AnonymousCredentials(),
- transport=transport,
- )
-
- # Everything is optional in proto3 as far as the runtime is concerned,
- # and we are mocking out the actual API, so just send an empty request.
- request = request_type()
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.search_hashes),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value = webrisk.SearchHashesResponse(
- )
- response = client.search_hashes(request)
-
- # Establish that the underlying gRPC stub method was called.
- assert len(call.mock_calls) == 1
- _, args, _ = call.mock_calls[0]
- assert args[0] == webrisk.SearchHashesRequest()
-
- # Establish that the response is the type that we expect.
- assert isinstance(response, webrisk.SearchHashesResponse)
-
-
-def test_search_hashes_from_dict():
- test_search_hashes(request_type=dict)
-
-
-def test_search_hashes_empty_call():
- # This test is a coverage failsafe to make sure that totally empty calls,
- # i.e. request == None and no flattened fields passed, work.
- client = WebRiskServiceV1Beta1Client(
- credentials=ga_credentials.AnonymousCredentials(),
- transport='grpc',
- )
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.search_hashes),
- '__call__') as call:
- client.search_hashes()
- call.assert_called()
- _, args, _ = call.mock_calls[0]
- assert args[0] == webrisk.SearchHashesRequest()
-
-
-@pytest.mark.asyncio
-async def test_search_hashes_async(transport: str = 'grpc_asyncio', request_type=webrisk.SearchHashesRequest):
- client = WebRiskServiceV1Beta1AsyncClient(
- credentials=ga_credentials.AnonymousCredentials(),
- transport=transport,
- )
-
- # Everything is optional in proto3 as far as the runtime is concerned,
- # and we are mocking out the actual API, so just send an empty request.
- request = request_type()
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.search_hashes),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(webrisk.SearchHashesResponse(
- ))
- response = await client.search_hashes(request)
-
- # Establish that the underlying gRPC stub method was called.
- assert len(call.mock_calls)
- _, args, _ = call.mock_calls[0]
- assert args[0] == webrisk.SearchHashesRequest()
-
- # Establish that the response is the type that we expect.
- assert isinstance(response, webrisk.SearchHashesResponse)
-
-
-@pytest.mark.asyncio
-async def test_search_hashes_async_from_dict():
- await test_search_hashes_async(request_type=dict)
-
-
-def test_search_hashes_flattened():
- client = WebRiskServiceV1Beta1Client(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.search_hashes),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value = webrisk.SearchHashesResponse()
- # Call the method with a truthy value for each flattened field,
- # using the keyword arguments to the method.
- client.search_hashes(
- hash_prefix=b'hash_prefix_blob',
- threat_types=[webrisk.ThreatType.MALWARE],
- )
-
- # Establish that the underlying call was made with the expected
- # request object values.
- assert len(call.mock_calls) == 1
- _, args, _ = call.mock_calls[0]
- assert args[0].hash_prefix == b'hash_prefix_blob'
- assert args[0].threat_types == [webrisk.ThreatType.MALWARE]
-
-
-def test_search_hashes_flattened_error():
- client = WebRiskServiceV1Beta1Client(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Attempting to call a method with both a request object and flattened
- # fields is an error.
- with pytest.raises(ValueError):
- client.search_hashes(
- webrisk.SearchHashesRequest(),
- hash_prefix=b'hash_prefix_blob',
- threat_types=[webrisk.ThreatType.MALWARE],
- )
-
-
-@pytest.mark.asyncio
-async def test_search_hashes_flattened_async():
- client = WebRiskServiceV1Beta1AsyncClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Mock the actual call within the gRPC stub, and fake the request.
- with mock.patch.object(
- type(client.transport.search_hashes),
- '__call__') as call:
- # Designate an appropriate return value for the call.
- call.return_value = webrisk.SearchHashesResponse()
-
- call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(webrisk.SearchHashesResponse())
- # Call the method with a truthy value for each flattened field,
- # using the keyword arguments to the method.
- response = await client.search_hashes(
- hash_prefix=b'hash_prefix_blob',
- threat_types=[webrisk.ThreatType.MALWARE],
- )
-
- # Establish that the underlying call was made with the expected
- # request object values.
- assert len(call.mock_calls)
- _, args, _ = call.mock_calls[0]
- assert args[0].hash_prefix == b'hash_prefix_blob'
- assert args[0].threat_types == [webrisk.ThreatType.MALWARE]
-
-
-@pytest.mark.asyncio
-async def test_search_hashes_flattened_error_async():
- client = WebRiskServiceV1Beta1AsyncClient(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Attempting to call a method with both a request object and flattened
- # fields is an error.
- with pytest.raises(ValueError):
- await client.search_hashes(
- webrisk.SearchHashesRequest(),
- hash_prefix=b'hash_prefix_blob',
- threat_types=[webrisk.ThreatType.MALWARE],
- )
-
-
-def test_credentials_transport_error():
- # It is an error to provide credentials and a transport instance.
- transport = transports.WebRiskServiceV1Beta1GrpcTransport(
- credentials=ga_credentials.AnonymousCredentials(),
- )
- with pytest.raises(ValueError):
- client = WebRiskServiceV1Beta1Client(
- credentials=ga_credentials.AnonymousCredentials(),
- transport=transport,
- )
-
- # It is an error to provide a credentials file and a transport instance.
- transport = transports.WebRiskServiceV1Beta1GrpcTransport(
- credentials=ga_credentials.AnonymousCredentials(),
- )
- with pytest.raises(ValueError):
- client = WebRiskServiceV1Beta1Client(
- client_options={"credentials_file": "credentials.json"},
- transport=transport,
- )
-
- # It is an error to provide scopes and a transport instance.
- transport = transports.WebRiskServiceV1Beta1GrpcTransport(
- credentials=ga_credentials.AnonymousCredentials(),
- )
- with pytest.raises(ValueError):
- client = WebRiskServiceV1Beta1Client(
- client_options={"scopes": ["1", "2"]},
- transport=transport,
- )
-
-
-def test_transport_instance():
- # A client may be instantiated with a custom transport instance.
- transport = transports.WebRiskServiceV1Beta1GrpcTransport(
- credentials=ga_credentials.AnonymousCredentials(),
- )
- client = WebRiskServiceV1Beta1Client(transport=transport)
- assert client.transport is transport
-
-def test_transport_get_channel():
- # A client may be instantiated with a custom transport instance.
- transport = transports.WebRiskServiceV1Beta1GrpcTransport(
- credentials=ga_credentials.AnonymousCredentials(),
- )
- channel = transport.grpc_channel
- assert channel
-
- transport = transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport(
- credentials=ga_credentials.AnonymousCredentials(),
- )
- channel = transport.grpc_channel
- assert channel
-
-@pytest.mark.parametrize("transport_class", [
- transports.WebRiskServiceV1Beta1GrpcTransport,
- transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport,
-])
-def test_transport_adc(transport_class):
- # Test default credentials are used if not provided.
- with mock.patch.object(google.auth, 'default') as adc:
- adc.return_value = (ga_credentials.AnonymousCredentials(), None)
- transport_class()
- adc.assert_called_once()
-
-def test_transport_grpc_default():
- # A client should use the gRPC transport by default.
- client = WebRiskServiceV1Beta1Client(
- credentials=ga_credentials.AnonymousCredentials(),
- )
- assert isinstance(
- client.transport,
- transports.WebRiskServiceV1Beta1GrpcTransport,
- )
-
-def test_web_risk_service_v1_beta1_base_transport_error():
- # Passing both a credentials object and credentials_file should raise an error
- with pytest.raises(core_exceptions.DuplicateCredentialArgs):
- transport = transports.WebRiskServiceV1Beta1Transport(
- credentials=ga_credentials.AnonymousCredentials(),
- credentials_file="credentials.json"
- )
-
-
-def test_web_risk_service_v1_beta1_base_transport():
- # Instantiate the base transport.
- with mock.patch('google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1.transports.WebRiskServiceV1Beta1Transport.__init__') as Transport:
- Transport.return_value = None
- transport = transports.WebRiskServiceV1Beta1Transport(
- credentials=ga_credentials.AnonymousCredentials(),
- )
-
- # Every method on the transport should just blindly
- # raise NotImplementedError.
- methods = (
- 'compute_threat_list_diff',
- 'search_uris',
- 'search_hashes',
- )
- for method in methods:
- with pytest.raises(NotImplementedError):
- getattr(transport, method)(request=object())
-
-
-@requires_google_auth_gte_1_25_0
-def test_web_risk_service_v1_beta1_base_transport_with_credentials_file():
- # Instantiate the base transport with a credentials file
- with mock.patch.object(google.auth, 'load_credentials_from_file', autospec=True) as load_creds, mock.patch('google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1.transports.WebRiskServiceV1Beta1Transport._prep_wrapped_messages') as Transport:
- Transport.return_value = None
- load_creds.return_value = (ga_credentials.AnonymousCredentials(), None)
- transport = transports.WebRiskServiceV1Beta1Transport(
- credentials_file="credentials.json",
- quota_project_id="octopus",
- )
- load_creds.assert_called_once_with("credentials.json",
- scopes=None,
- default_scopes=(
- 'https://www.googleapis.com/auth/cloud-platform',
-),
- quota_project_id="octopus",
- )
-
-
-@requires_google_auth_lt_1_25_0
-def test_web_risk_service_v1_beta1_base_transport_with_credentials_file_old_google_auth():
- # Instantiate the base transport with a credentials file
- with mock.patch.object(google.auth, 'load_credentials_from_file', autospec=True) as load_creds, mock.patch('google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1.transports.WebRiskServiceV1Beta1Transport._prep_wrapped_messages') as Transport:
- Transport.return_value = None
- load_creds.return_value = (ga_credentials.AnonymousCredentials(), None)
- transport = transports.WebRiskServiceV1Beta1Transport(
- credentials_file="credentials.json",
- quota_project_id="octopus",
- )
- load_creds.assert_called_once_with("credentials.json", scopes=(
- 'https://www.googleapis.com/auth/cloud-platform',
- ),
- quota_project_id="octopus",
- )
-
-
-def test_web_risk_service_v1_beta1_base_transport_with_adc():
- # Test the default credentials are used if credentials and credentials_file are None.
- with mock.patch.object(google.auth, 'default', autospec=True) as adc, mock.patch('google.cloud.webrisk_v1beta1.services.web_risk_service_v1_beta1.transports.WebRiskServiceV1Beta1Transport._prep_wrapped_messages') as Transport:
- Transport.return_value = None
- adc.return_value = (ga_credentials.AnonymousCredentials(), None)
- transport = transports.WebRiskServiceV1Beta1Transport()
- adc.assert_called_once()
-
-
-@requires_google_auth_gte_1_25_0
-def test_web_risk_service_v1_beta1_auth_adc():
- # If no credentials are provided, we should use ADC credentials.
- with mock.patch.object(google.auth, 'default', autospec=True) as adc:
- adc.return_value = (ga_credentials.AnonymousCredentials(), None)
- WebRiskServiceV1Beta1Client()
- adc.assert_called_once_with(
- scopes=None,
- default_scopes=(
- 'https://www.googleapis.com/auth/cloud-platform',
-),
- quota_project_id=None,
- )
-
-
-@requires_google_auth_lt_1_25_0
-def test_web_risk_service_v1_beta1_auth_adc_old_google_auth():
- # If no credentials are provided, we should use ADC credentials.
- with mock.patch.object(google.auth, 'default', autospec=True) as adc:
- adc.return_value = (ga_credentials.AnonymousCredentials(), None)
- WebRiskServiceV1Beta1Client()
- adc.assert_called_once_with(
- scopes=( 'https://www.googleapis.com/auth/cloud-platform',),
- quota_project_id=None,
- )
-
-
-@pytest.mark.parametrize(
- "transport_class",
- [
- transports.WebRiskServiceV1Beta1GrpcTransport,
- transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport,
- ],
-)
-@requires_google_auth_gte_1_25_0
-def test_web_risk_service_v1_beta1_transport_auth_adc(transport_class):
- # If credentials and host are not provided, the transport class should use
- # ADC credentials.
- with mock.patch.object(google.auth, 'default', autospec=True) as adc:
- adc.return_value = (ga_credentials.AnonymousCredentials(), None)
- transport_class(quota_project_id="octopus", scopes=["1", "2"])
- adc.assert_called_once_with(
- scopes=["1", "2"],
- default_scopes=( 'https://www.googleapis.com/auth/cloud-platform',),
- quota_project_id="octopus",
- )
-
-
-@pytest.mark.parametrize(
- "transport_class",
- [
- transports.WebRiskServiceV1Beta1GrpcTransport,
- transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport,
- ],
-)
-@requires_google_auth_lt_1_25_0
-def test_web_risk_service_v1_beta1_transport_auth_adc_old_google_auth(transport_class):
- # If credentials and host are not provided, the transport class should use
- # ADC credentials.
- with mock.patch.object(google.auth, "default", autospec=True) as adc:
- adc.return_value = (ga_credentials.AnonymousCredentials(), None)
- transport_class(quota_project_id="octopus")
- adc.assert_called_once_with(scopes=(
- 'https://www.googleapis.com/auth/cloud-platform',
-),
- quota_project_id="octopus",
- )
-
-
-@pytest.mark.parametrize(
- "transport_class,grpc_helpers",
- [
- (transports.WebRiskServiceV1Beta1GrpcTransport, grpc_helpers),
- (transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport, grpc_helpers_async)
- ],
-)
-def test_web_risk_service_v1_beta1_transport_create_channel(transport_class, grpc_helpers):
- # If credentials and host are not provided, the transport class should use
- # ADC credentials.
- with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch.object(
- grpc_helpers, "create_channel", autospec=True
- ) as create_channel:
- creds = ga_credentials.AnonymousCredentials()
- adc.return_value = (creds, None)
- transport_class(
- quota_project_id="octopus",
- scopes=["1", "2"]
- )
-
- create_channel.assert_called_with(
- "webrisk.googleapis.com:443",
- credentials=creds,
- credentials_file=None,
- quota_project_id="octopus",
- default_scopes=(
- 'https://www.googleapis.com/auth/cloud-platform',
-),
- scopes=["1", "2"],
- default_host="webrisk.googleapis.com",
- ssl_credentials=None,
- options=[
- ("grpc.max_send_message_length", -1),
- ("grpc.max_receive_message_length", -1),
- ],
- )
-
-
-@pytest.mark.parametrize("transport_class", [transports.WebRiskServiceV1Beta1GrpcTransport, transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport])
-def test_web_risk_service_v1_beta1_grpc_transport_client_cert_source_for_mtls(
- transport_class
-):
- cred = ga_credentials.AnonymousCredentials()
-
- # Check ssl_channel_credentials is used if provided.
- with mock.patch.object(transport_class, "create_channel") as mock_create_channel:
- mock_ssl_channel_creds = mock.Mock()
- transport_class(
- host="squid.clam.whelk",
- credentials=cred,
- ssl_channel_credentials=mock_ssl_channel_creds
- )
- mock_create_channel.assert_called_once_with(
- "squid.clam.whelk:443",
- credentials=cred,
- credentials_file=None,
- scopes=None,
- ssl_credentials=mock_ssl_channel_creds,
- quota_project_id=None,
- options=[
- ("grpc.max_send_message_length", -1),
- ("grpc.max_receive_message_length", -1),
- ],
- )
-
- # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls
- # is used.
- with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()):
- with mock.patch("grpc.ssl_channel_credentials") as mock_ssl_cred:
- transport_class(
- credentials=cred,
- client_cert_source_for_mtls=client_cert_source_callback
- )
- expected_cert, expected_key = client_cert_source_callback()
- mock_ssl_cred.assert_called_once_with(
- certificate_chain=expected_cert,
- private_key=expected_key
- )
-
-
-def test_web_risk_service_v1_beta1_host_no_port():
- client = WebRiskServiceV1Beta1Client(
- credentials=ga_credentials.AnonymousCredentials(),
- client_options=client_options.ClientOptions(api_endpoint='webrisk.googleapis.com'),
- )
- assert client.transport._host == 'webrisk.googleapis.com:443'
-
-
-def test_web_risk_service_v1_beta1_host_with_port():
- client = WebRiskServiceV1Beta1Client(
- credentials=ga_credentials.AnonymousCredentials(),
- client_options=client_options.ClientOptions(api_endpoint='webrisk.googleapis.com:8000'),
- )
- assert client.transport._host == 'webrisk.googleapis.com:8000'
-
-def test_web_risk_service_v1_beta1_grpc_transport_channel():
- channel = grpc.secure_channel('http://localhost/', grpc.local_channel_credentials())
-
- # Check that channel is used if provided.
- transport = transports.WebRiskServiceV1Beta1GrpcTransport(
- host="squid.clam.whelk",
- channel=channel,
- )
- assert transport.grpc_channel == channel
- assert transport._host == "squid.clam.whelk:443"
- assert transport._ssl_channel_credentials == None
-
-
-def test_web_risk_service_v1_beta1_grpc_asyncio_transport_channel():
- channel = aio.secure_channel('http://localhost/', grpc.local_channel_credentials())
-
- # Check that channel is used if provided.
- transport = transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport(
- host="squid.clam.whelk",
- channel=channel,
- )
- assert transport.grpc_channel == channel
- assert transport._host == "squid.clam.whelk:443"
- assert transport._ssl_channel_credentials == None
-
-
-# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are
-# removed from grpc/grpc_asyncio transport constructor.
-@pytest.mark.parametrize("transport_class", [transports.WebRiskServiceV1Beta1GrpcTransport, transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport])
-def test_web_risk_service_v1_beta1_transport_channel_mtls_with_client_cert_source(
- transport_class
-):
- with mock.patch("grpc.ssl_channel_credentials", autospec=True) as grpc_ssl_channel_cred:
- with mock.patch.object(transport_class, "create_channel") as grpc_create_channel:
- mock_ssl_cred = mock.Mock()
- grpc_ssl_channel_cred.return_value = mock_ssl_cred
-
- mock_grpc_channel = mock.Mock()
- grpc_create_channel.return_value = mock_grpc_channel
-
- cred = ga_credentials.AnonymousCredentials()
- with pytest.warns(DeprecationWarning):
- with mock.patch.object(google.auth, 'default') as adc:
- adc.return_value = (cred, None)
- transport = transport_class(
- host="squid.clam.whelk",
- api_mtls_endpoint="mtls.squid.clam.whelk",
- client_cert_source=client_cert_source_callback,
- )
- adc.assert_called_once()
-
- grpc_ssl_channel_cred.assert_called_once_with(
- certificate_chain=b"cert bytes", private_key=b"key bytes"
- )
- grpc_create_channel.assert_called_once_with(
- "mtls.squid.clam.whelk:443",
- credentials=cred,
- credentials_file=None,
- scopes=None,
- ssl_credentials=mock_ssl_cred,
- quota_project_id=None,
- options=[
- ("grpc.max_send_message_length", -1),
- ("grpc.max_receive_message_length", -1),
- ],
- )
- assert transport.grpc_channel == mock_grpc_channel
- assert transport._ssl_channel_credentials == mock_ssl_cred
-
-
-# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are
-# removed from grpc/grpc_asyncio transport constructor.
-@pytest.mark.parametrize("transport_class", [transports.WebRiskServiceV1Beta1GrpcTransport, transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport])
-def test_web_risk_service_v1_beta1_transport_channel_mtls_with_adc(
- transport_class
-):
- mock_ssl_cred = mock.Mock()
- with mock.patch.multiple(
- "google.auth.transport.grpc.SslCredentials",
- __init__=mock.Mock(return_value=None),
- ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred),
- ):
- with mock.patch.object(transport_class, "create_channel") as grpc_create_channel:
- mock_grpc_channel = mock.Mock()
- grpc_create_channel.return_value = mock_grpc_channel
- mock_cred = mock.Mock()
-
- with pytest.warns(DeprecationWarning):
- transport = transport_class(
- host="squid.clam.whelk",
- credentials=mock_cred,
- api_mtls_endpoint="mtls.squid.clam.whelk",
- client_cert_source=None,
- )
-
- grpc_create_channel.assert_called_once_with(
- "mtls.squid.clam.whelk:443",
- credentials=mock_cred,
- credentials_file=None,
- scopes=None,
- ssl_credentials=mock_ssl_cred,
- quota_project_id=None,
- options=[
- ("grpc.max_send_message_length", -1),
- ("grpc.max_receive_message_length", -1),
- ],
- )
- assert transport.grpc_channel == mock_grpc_channel
-
-
-def test_common_billing_account_path():
- billing_account = "squid"
- expected = "billingAccounts/{billing_account}".format(billing_account=billing_account, )
- actual = WebRiskServiceV1Beta1Client.common_billing_account_path(billing_account)
- assert expected == actual
-
-
-def test_parse_common_billing_account_path():
- expected = {
- "billing_account": "clam",
- }
- path = WebRiskServiceV1Beta1Client.common_billing_account_path(**expected)
-
- # Check that the path construction is reversible.
- actual = WebRiskServiceV1Beta1Client.parse_common_billing_account_path(path)
- assert expected == actual
-
-def test_common_folder_path():
- folder = "whelk"
- expected = "folders/{folder}".format(folder=folder, )
- actual = WebRiskServiceV1Beta1Client.common_folder_path(folder)
- assert expected == actual
-
-
-def test_parse_common_folder_path():
- expected = {
- "folder": "octopus",
- }
- path = WebRiskServiceV1Beta1Client.common_folder_path(**expected)
-
- # Check that the path construction is reversible.
- actual = WebRiskServiceV1Beta1Client.parse_common_folder_path(path)
- assert expected == actual
-
-def test_common_organization_path():
- organization = "oyster"
- expected = "organizations/{organization}".format(organization=organization, )
- actual = WebRiskServiceV1Beta1Client.common_organization_path(organization)
- assert expected == actual
-
-
-def test_parse_common_organization_path():
- expected = {
- "organization": "nudibranch",
- }
- path = WebRiskServiceV1Beta1Client.common_organization_path(**expected)
-
- # Check that the path construction is reversible.
- actual = WebRiskServiceV1Beta1Client.parse_common_organization_path(path)
- assert expected == actual
-
-def test_common_project_path():
- project = "cuttlefish"
- expected = "projects/{project}".format(project=project, )
- actual = WebRiskServiceV1Beta1Client.common_project_path(project)
- assert expected == actual
-
-
-def test_parse_common_project_path():
- expected = {
- "project": "mussel",
- }
- path = WebRiskServiceV1Beta1Client.common_project_path(**expected)
-
- # Check that the path construction is reversible.
- actual = WebRiskServiceV1Beta1Client.parse_common_project_path(path)
- assert expected == actual
-
-def test_common_location_path():
- project = "winkle"
- location = "nautilus"
- expected = "projects/{project}/locations/{location}".format(project=project, location=location, )
- actual = WebRiskServiceV1Beta1Client.common_location_path(project, location)
- assert expected == actual
-
-
-def test_parse_common_location_path():
- expected = {
- "project": "scallop",
- "location": "abalone",
- }
- path = WebRiskServiceV1Beta1Client.common_location_path(**expected)
-
- # Check that the path construction is reversible.
- actual = WebRiskServiceV1Beta1Client.parse_common_location_path(path)
- assert expected == actual
-
-
-def test_client_withDEFAULT_CLIENT_INFO():
- client_info = gapic_v1.client_info.ClientInfo()
-
- with mock.patch.object(transports.WebRiskServiceV1Beta1Transport, '_prep_wrapped_messages') as prep:
- client = WebRiskServiceV1Beta1Client(
- credentials=ga_credentials.AnonymousCredentials(),
- client_info=client_info,
- )
- prep.assert_called_once_with(client_info)
-
- with mock.patch.object(transports.WebRiskServiceV1Beta1Transport, '_prep_wrapped_messages') as prep:
- transport_class = WebRiskServiceV1Beta1Client.get_transport_class()
- transport = transport_class(
- credentials=ga_credentials.AnonymousCredentials(),
- client_info=client_info,
- )
- prep.assert_called_once_with(client_info)
diff --git a/setup.py b/setup.py
index 377beee..5e8f6a2 100644
--- a/setup.py
+++ b/setup.py
@@ -22,7 +22,7 @@
name = "google-cloud-webrisk"
description = "Google Cloud Web Risk API client library"
-version = "1.3.0"
+version = "1.4.0"
# Should be one of:
# 'Development Status :: 3 - Alpha'
# 'Development Status :: 4 - Beta'
diff --git a/tests/unit/gapic/webrisk_v1/test_web_risk_service.py b/tests/unit/gapic/webrisk_v1/test_web_risk_service.py
index 87b4d6f..bcac507 100644
--- a/tests/unit/gapic/webrisk_v1/test_web_risk_service.py
+++ b/tests/unit/gapic/webrisk_v1/test_web_risk_service.py
@@ -127,7 +127,25 @@ def test_web_risk_service_client_service_account_always_use_jwt(client_class):
) as use_jwt:
creds = service_account.Credentials(None, None, None)
client = client_class(credentials=creds)
- use_jwt.assert_called_with(True)
+ use_jwt.assert_not_called()
+
+
+@pytest.mark.parametrize(
+ "transport_class,transport_name",
+ [
+ (transports.WebRiskServiceGrpcTransport, "grpc"),
+ (transports.WebRiskServiceGrpcAsyncIOTransport, "grpc_asyncio"),
+ ],
+)
+def test_web_risk_service_client_service_account_always_use_jwt_true(
+ transport_class, transport_name
+):
+ with mock.patch.object(
+ service_account.Credentials, "with_always_use_jwt_access", create=True
+ ) as use_jwt:
+ creds = service_account.Credentials(None, None, None)
+ transport = transport_class(credentials=creds, always_use_jwt_access=True)
+ use_jwt.assert_called_once_with(True)
@pytest.mark.parametrize(
@@ -1490,7 +1508,7 @@ def test_web_risk_service_grpc_transport_client_cert_source_for_mtls(transport_c
"squid.clam.whelk:443",
credentials=cred,
credentials_file=None,
- scopes=("https://www.googleapis.com/auth/cloud-platform",),
+ scopes=None,
ssl_credentials=mock_ssl_channel_creds,
quota_project_id=None,
options=[
@@ -1599,7 +1617,7 @@ def test_web_risk_service_transport_channel_mtls_with_client_cert_source(
"mtls.squid.clam.whelk:443",
credentials=cred,
credentials_file=None,
- scopes=("https://www.googleapis.com/auth/cloud-platform",),
+ scopes=None,
ssl_credentials=mock_ssl_cred,
quota_project_id=None,
options=[
@@ -1646,7 +1664,7 @@ def test_web_risk_service_transport_channel_mtls_with_adc(transport_class):
"mtls.squid.clam.whelk:443",
credentials=mock_cred,
credentials_file=None,
- scopes=("https://www.googleapis.com/auth/cloud-platform",),
+ scopes=None,
ssl_credentials=mock_ssl_cred,
quota_project_id=None,
options=[
diff --git a/tests/unit/gapic/webrisk_v1beta1/test_web_risk_service_v1_beta1.py b/tests/unit/gapic/webrisk_v1beta1/test_web_risk_service_v1_beta1.py
index 32a390b..d36b3ba 100644
--- a/tests/unit/gapic/webrisk_v1beta1/test_web_risk_service_v1_beta1.py
+++ b/tests/unit/gapic/webrisk_v1beta1/test_web_risk_service_v1_beta1.py
@@ -132,7 +132,25 @@ def test_web_risk_service_v1_beta1_client_service_account_always_use_jwt(client_
) as use_jwt:
creds = service_account.Credentials(None, None, None)
client = client_class(credentials=creds)
- use_jwt.assert_called_with(True)
+ use_jwt.assert_not_called()
+
+
+@pytest.mark.parametrize(
+ "transport_class,transport_name",
+ [
+ (transports.WebRiskServiceV1Beta1GrpcTransport, "grpc"),
+ (transports.WebRiskServiceV1Beta1GrpcAsyncIOTransport, "grpc_asyncio"),
+ ],
+)
+def test_web_risk_service_v1_beta1_client_service_account_always_use_jwt_true(
+ transport_class, transport_name
+):
+ with mock.patch.object(
+ service_account.Credentials, "with_always_use_jwt_access", create=True
+ ) as use_jwt:
+ creds = service_account.Credentials(None, None, None)
+ transport = transport_class(credentials=creds, always_use_jwt_access=True)
+ use_jwt.assert_called_once_with(True)
@pytest.mark.parametrize(
@@ -1312,7 +1330,7 @@ def test_web_risk_service_v1_beta1_grpc_transport_client_cert_source_for_mtls(
"squid.clam.whelk:443",
credentials=cred,
credentials_file=None,
- scopes=("https://www.googleapis.com/auth/cloud-platform",),
+ scopes=None,
ssl_credentials=mock_ssl_channel_creds,
quota_project_id=None,
options=[
@@ -1421,7 +1439,7 @@ def test_web_risk_service_v1_beta1_transport_channel_mtls_with_client_cert_sourc
"mtls.squid.clam.whelk:443",
credentials=cred,
credentials_file=None,
- scopes=("https://www.googleapis.com/auth/cloud-platform",),
+ scopes=None,
ssl_credentials=mock_ssl_cred,
quota_project_id=None,
options=[
@@ -1468,7 +1486,7 @@ def test_web_risk_service_v1_beta1_transport_channel_mtls_with_adc(transport_cla
"mtls.squid.clam.whelk:443",
credentials=mock_cred,
credentials_file=None,
- scopes=("https://www.googleapis.com/auth/cloud-platform",),
+ scopes=None,
ssl_credentials=mock_ssl_cred,
quota_project_id=None,
options=[