Skip to content

Commit

Permalink
PubSub: add geo-fencing support (#5769)
Browse files Browse the repository at this point in the history
* Add support for storage location policy (geo-fencing) to Pub/Sub by regenerating v1 endpoint
  • Loading branch information
crwilcox authored Aug 10, 2018
1 parent b8b28b1 commit 371333a
Show file tree
Hide file tree
Showing 19 changed files with 2,799 additions and 1,913 deletions.
7 changes: 3 additions & 4 deletions pubsub/LICENSE
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@

Apache License
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
https://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

Expand Down Expand Up @@ -193,7 +192,7 @@
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
https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
Expand Down
3 changes: 2 additions & 1 deletion pubsub/MANIFEST.in
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
include README.rst LICENSE
recursive-include google *.json *.proto
recursive-include tests *
global-exclude *.pyc __pycache__
global-exclude *.py[co]
global-exclude __pycache__
4 changes: 2 additions & 2 deletions pubsub/google/__init__.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# Copyright 2016 Google LLC
# Copyright 2018 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
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
Expand Down
4 changes: 2 additions & 2 deletions pubsub/google/cloud/__init__.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# Copyright 2016 Google LLC
# Copyright 2018 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
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
Expand Down
4 changes: 2 additions & 2 deletions pubsub/google/cloud/pubsub.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# Copyright 2017, Google LLC All rights reserved.
# Copyright 2018 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
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
Expand Down
487 changes: 343 additions & 144 deletions pubsub/google/cloud/pubsub_v1/gapic/publisher_client.py

Large diffs are not rendered by default.

826 changes: 573 additions & 253 deletions pubsub/google/cloud/pubsub_v1/gapic/subscriber_client.py

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@
"retry_params_name": "messaging"
},
"StreamingPull": {
"timeout_millis": 60000,
"timeout_millis": 900000,
"retry_codes_name": "pull",
"retry_params_name": "streaming_messaging"
},
Expand Down
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,238 @@
# Copyright 2018 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import google.api_core.grpc_helpers

from google.cloud.pubsub_v1.proto import pubsub_pb2_grpc
from google.iam.v1 import iam_policy_pb2


class PublisherGrpcTransport(object):
"""gRPC transport class providing stubs for
google.pubsub.v1 Publisher API.
The transport provides access to the raw gRPC stubs,
which can be used to take advantage of advanced
features of gRPC.
"""
# The scopes needed to make gRPC calls to all of the methods defined
# in this service.
_OAUTH_SCOPES = (
'https://www.googleapis.com/auth/cloud-platform',
'https://www.googleapis.com/auth/pubsub',
)

def __init__(self,
channel=None,
credentials=None,
address='pubsub.googleapis.com:443'):
"""Instantiate the transport class.
Args:
channel (grpc.Channel): A ``Channel`` instance through
which to make calls. This argument is mutually exclusive
with ``credentials``; providing both will raise an exception.
credentials (google.auth.credentials.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.
address (str): The address where the service is hosted.
"""
# If both `channel` and `credentials` are specified, raise an
# exception (channels come with credentials baked in already).
if channel is not None and credentials is not None:
raise ValueError(
'The `channel` and `credentials` arguments are mutually '
'exclusive.', )

# Create the channel.
if channel is None:
channel = self.create_channel(
address=address,
credentials=credentials,
)

# gRPC uses objects called "stubs" that are bound to the
# channel and provide a basic method for each RPC.
self._stubs = {
'iam_policy_stub': iam_policy_pb2.IAMPolicyStub(channel),
'publisher_stub': pubsub_pb2_grpc.PublisherStub(channel),
}

@classmethod
def create_channel(cls,
address='pubsub.googleapis.com:443',
credentials=None):
"""Create and return a gRPC channel object.
Args:
address (str): The host for the channel to use.
credentials (~.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.
Returns:
grpc.Channel: A gRPC channel object.
"""
return google.api_core.grpc_helpers.create_channel(
address,
credentials=credentials,
scopes=cls._OAUTH_SCOPES,
)

@property
def create_topic(self):
"""Return the gRPC stub for {$apiMethod.name}.
Creates the given topic with the given name. See the
<a href=\"/pubsub/docs/admin#resource_names\"> resource name rules</a>.
Returns:
Callable: A callable which accepts the appropriate
deserialized request object and returns a
deserialized response object.
"""
return self._stubs['publisher_stub'].CreateTopic

@property
def update_topic(self):
"""Return the gRPC stub for {$apiMethod.name}.
Updates an existing topic. Note that certain properties of a
topic are not modifiable.
Returns:
Callable: A callable which accepts the appropriate
deserialized request object and returns a
deserialized response object.
"""
return self._stubs['publisher_stub'].UpdateTopic

@property
def publish(self):
"""Return the gRPC stub for {$apiMethod.name}.
Adds one or more messages to the topic. Returns ``NOT_FOUND`` if the topic
does not exist. The message payload must not be empty; it must contain
either a non-empty data field, or at least one attribute.
Returns:
Callable: A callable which accepts the appropriate
deserialized request object and returns a
deserialized response object.
"""
return self._stubs['publisher_stub'].Publish

@property
def get_topic(self):
"""Return the gRPC stub for {$apiMethod.name}.
Gets the configuration of a topic.
Returns:
Callable: A callable which accepts the appropriate
deserialized request object and returns a
deserialized response object.
"""
return self._stubs['publisher_stub'].GetTopic

@property
def list_topics(self):
"""Return the gRPC stub for {$apiMethod.name}.
Lists matching topics.
Returns:
Callable: A callable which accepts the appropriate
deserialized request object and returns a
deserialized response object.
"""
return self._stubs['publisher_stub'].ListTopics

@property
def list_topic_subscriptions(self):
"""Return the gRPC stub for {$apiMethod.name}.
Lists the names of the subscriptions on this topic.
Returns:
Callable: A callable which accepts the appropriate
deserialized request object and returns a
deserialized response object.
"""
return self._stubs['publisher_stub'].ListTopicSubscriptions

@property
def delete_topic(self):
"""Return the gRPC stub for {$apiMethod.name}.
Deletes the topic with the given name. Returns ``NOT_FOUND`` if the topic
does not exist. After a topic is deleted, a new topic may be created with
the same name; this is an entirely new topic with none of the old
configuration or subscriptions. Existing subscriptions to this topic are
not deleted, but their ``topic`` field is set to ``_deleted-topic_``.
Returns:
Callable: A callable which accepts the appropriate
deserialized request object and returns a
deserialized response object.
"""
return self._stubs['publisher_stub'].DeleteTopic

@property
def set_iam_policy(self):
"""Return the gRPC stub for {$apiMethod.name}.
Sets the access control policy on the specified resource. Replaces any
existing policy.
Returns:
Callable: A callable which accepts the appropriate
deserialized request object and returns a
deserialized response object.
"""
return self._stubs['iam_policy_stub'].SetIamPolicy

@property
def get_iam_policy(self):
"""Return the gRPC stub for {$apiMethod.name}.
Gets the access control policy for a resource.
Returns an empty policy if the resource exists and does not have a policy
set.
Returns:
Callable: A callable which accepts the appropriate
deserialized request object and returns a
deserialized response object.
"""
return self._stubs['iam_policy_stub'].GetIamPolicy

@property
def test_iam_permissions(self):
"""Return the gRPC stub for {$apiMethod.name}.
Returns permissions that a caller has on the specified resource.
If the resource does not exist, this will return an empty set of
permissions, not a NOT_FOUND error.
Returns:
Callable: A callable which accepts the appropriate
deserialized request object and returns a
deserialized response object.
"""
return self._stubs['iam_policy_stub'].TestIamPermissions
Loading

0 comments on commit 371333a

Please sign in to comment.