diff --git a/gcloud/pubsub/subscription.py b/gcloud/pubsub/subscription.py index 51154f5bb239..a6915a19d03e 100644 --- a/gcloud/pubsub/subscription.py +++ b/gcloud/pubsub/subscription.py @@ -45,6 +45,7 @@ def __init__(self, name, topic, ack_deadline=None, push_endpoint=None): self.topic = topic self.ack_deadline = ack_deadline self.push_endpoint = push_endpoint + self._path = None @classmethod def from_api_repr(cls, resource, topics=None): @@ -75,7 +76,15 @@ def from_api_repr(cls, resource, topics=None): def path(self): """URL path for the subscription's APIs""" project = self.topic.project - return '/projects/%s/subscriptions/%s' % (project, self.name) + path = '/projects/%s/subscriptions/%s' % (project, self.name) + if self._path is not None: + path = self._path + return path + + @path.setter + def path(self, project): + """URL path setter""" + self._path = '/projects/%s/subscriptions/%s' % (project, self.name) def create(self, connection=None): """API call: create the subscription via a PUT request diff --git a/gcloud/pubsub/test_subscription.py b/gcloud/pubsub/test_subscription.py index 45d2a97ead34..989a0fff0c7d 100644 --- a/gcloud/pubsub/test_subscription.py +++ b/gcloud/pubsub/test_subscription.py @@ -456,6 +456,19 @@ def test_delete_w_explicit_connection(self): self.assertEqual(req['method'], 'DELETE') self.assertEqual(req['path'], '/%s' % SUB_PATH) + def test_set_path_property(self): + PROJECT = 'PROJECT' + PROJECT2 = 'PROJECT2' + SUB_NAME = 'sub_name' + SUB_PATH = '/projects/%s/subscriptions/%s' % (PROJECT, SUB_NAME) + SUB_PATH2 = '/projects/%s/subscriptions/%s' % (PROJECT2, SUB_NAME) + TOPIC_NAME = 'topic_name' + topic = _Topic(TOPIC_NAME, project=PROJECT) + subscription = self._makeOne(SUB_NAME, topic) + self.assertEqual(SUB_PATH, subscription.path) + subscription.path = PROJECT2 + self.assertEqual(SUB_PATH2, subscription.path) + class _Connection(object):