Skip to content

Commit 2f1350e

Browse files
committed
Update topic/subscription path patterns to match values found in the wild.
1 parent 5dbf6f6 commit 2f1350e

2 files changed

Lines changed: 41 additions & 11 deletions

File tree

gcloud/pubsub/_helpers.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,27 @@
1414

1515
"""Helper functions for shared behavior."""
1616

17+
import re
18+
1719
from gcloud._helpers import _name_from_project_path
1820

1921

22+
_TOPIC_TEMPLATE = re.compile(r"""
23+
projects/ # static prefix
24+
(?P<project>[^/]+) # initial letter, wordchars + hyphen
25+
/topics/ # static midfix
26+
(?P<name>[^/]+) # initial letter, wordchars + allowed punc
27+
""", re.VERBOSE)
28+
29+
30+
_SUBSCRIPTION_TEMPLATE = re.compile(r"""
31+
projects/ # static prefix
32+
(?P<project>[^/]+) # initial letter, wordchars + hyphen
33+
/subscriptions/ # static midfix
34+
(?P<name>[^/]+) # initial letter, wordchars + allowed punc
35+
""", re.VERBOSE)
36+
37+
2038
def topic_name_from_path(path, project):
2139
"""Validate a topic URI path and get the topic name.
2240
@@ -33,8 +51,7 @@ def topic_name_from_path(path, project):
3351
the project from the ``path`` does not agree with the
3452
``project`` passed in.
3553
"""
36-
template = r'projects/(?P<project>\w+)/topics/(?P<name>\w+)'
37-
return _name_from_project_path(path, project, template)
54+
return _name_from_project_path(path, project, _TOPIC_TEMPLATE)
3855

3956

4057
def subscription_name_from_path(path, project):
@@ -53,5 +70,4 @@ def subscription_name_from_path(path, project):
5370
the project from the ``path`` does not agree with the
5471
``project`` passed in.
5572
"""
56-
template = r'projects/(?P<project>\w+)/subscriptions/(?P<name>\w+)'
57-
return _name_from_project_path(path, project, template)
73+
return _name_from_project_path(path, project, _SUBSCRIPTION_TEMPLATE)

gcloud/pubsub/test__helpers.py

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,16 @@ def _callFUT(self, path, project):
2121
from gcloud.pubsub._helpers import topic_name_from_path
2222
return topic_name_from_path(path, project)
2323

24-
def test_it(self):
24+
def test_w_simple_name(self):
2525
TOPIC_NAME = 'TOPIC_NAME'
26-
PROJECT = 'PROJECT'
26+
PROJECT = 'my-project-1234'
27+
PATH = 'projects/%s/topics/%s' % (PROJECT, TOPIC_NAME)
28+
topic_name = self._callFUT(PATH, PROJECT)
29+
self.assertEqual(topic_name, TOPIC_NAME)
30+
31+
def test_w_name_w_all_extras(self):
32+
TOPIC_NAME = 'TOPIC_NAME-part.one~part.two%part-three'
33+
PROJECT = 'my-project-1234'
2734
PATH = 'projects/%s/topics/%s' % (PROJECT, TOPIC_NAME)
2835
topic_name = self._callFUT(PATH, PROJECT)
2936
self.assertEqual(topic_name, TOPIC_NAME)
@@ -35,9 +42,16 @@ def _callFUT(self, path, project):
3542
from gcloud.pubsub._helpers import subscription_name_from_path
3643
return subscription_name_from_path(path, project)
3744

38-
def test_it(self):
39-
TOPIC_NAME = 'TOPIC_NAME'
40-
PROJECT = 'PROJECT'
41-
PATH = 'projects/%s/subscriptions/%s' % (PROJECT, TOPIC_NAME)
45+
def test_w_simple_name(self):
46+
SUBSCRIPTION_NAME = 'SUBSCRIPTION_NAME'
47+
PROJECT = 'my-project-1234'
48+
PATH = 'projects/%s/subscriptions/%s' % (PROJECT, SUBSCRIPTION_NAME)
4249
subscription_name = self._callFUT(PATH, PROJECT)
43-
self.assertEqual(subscription_name, TOPIC_NAME)
50+
self.assertEqual(subscription_name, SUBSCRIPTION_NAME)
51+
52+
def test_w_name_w_all_extras(self):
53+
SUBSCRIPTION_NAME = 'SUBSCRIPTION_NAME-part.one~part.two%part-three'
54+
PROJECT = 'my-project-1234'
55+
PATH = 'projects/%s/subscriptions/%s' % (PROJECT, SUBSCRIPTION_NAME)
56+
topic_name = self._callFUT(PATH, PROJECT)
57+
self.assertEqual(topic_name, SUBSCRIPTION_NAME)

0 commit comments

Comments
 (0)