Skip to content

Commit e898bca

Browse files
committed
Merge branch 'master' into logging-api
2 parents 5c2f2ed + 72617b3 commit e898bca

File tree

3 files changed

+46
-14
lines changed

3 files changed

+46
-14
lines changed

gcloud/_helpers.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -416,12 +416,14 @@ def _name_from_project_path(path, project, template):
416416
match = template.match(path)
417417

418418
if not match:
419-
raise ValueError('path did not match: %s' % (template.pattern,))
419+
raise ValueError('path "%s" did not match expected pattern "%s"' % (
420+
path, template.pattern,))
420421

421422
found_project = match.group('project')
422423
if found_project != project:
423-
raise ValueError('Project from client should agree with '
424-
'project from resource.')
424+
raise ValueError(
425+
'Project from client (%s) should agree with '
426+
'project from resource(%s).' % (project, found_project))
425427

426428
return match.group('name')
427429

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)