Skip to content

Commit e16b542

Browse files
committed
Merge pull request #1585 from tseaver/logging-metric_exists
Add 'Metrics.exists' API wrapper.
2 parents f2d8ad6 + 9a56835 commit e16b542

2 files changed

Lines changed: 46 additions & 0 deletions

File tree

gcloud/logging/metric.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
"""Define Logging API Metrics."""
1616

17+
from gcloud.exceptions import NotFound
18+
1719

1820
class Metric(object):
1921
"""Metrics represent named filters for log entries.
@@ -93,3 +95,22 @@ def create(self, client=None):
9395
if self.description:
9496
data['description'] = self.description
9597
client.connection.api_request(method='PUT', path=self.path, data=data)
98+
99+
def exists(self, client=None):
100+
"""API call: test for the existence of the metric via a GET request
101+
102+
See
103+
https://cloud.google.com/logging/docs/api/ref_v2beta1/rest/v2beta1/projects.metrics/get
104+
105+
:type client: :class:`gcloud.logging.client.Client` or ``NoneType``
106+
:param client: the client to use. If not passed, falls back to the
107+
``client`` stored on the current metric.
108+
"""
109+
client = self._require_client(client)
110+
111+
try:
112+
client.connection.api_request(method='GET', path=self.path)
113+
except NotFound:
114+
return False
115+
else:
116+
return True

gcloud/logging/test_metric.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,31 @@ def test_create_w_alternate_client(self):
9393
self.assertEqual(req['path'], '/%s' % FULL)
9494
self.assertEqual(req['data'], RESOURCE)
9595

96+
def test_exists_miss_w_bound_client(self):
97+
FULL = 'projects/%s/metrics/%s' % (self.PROJECT, self.METRIC_NAME)
98+
conn = _Connection()
99+
CLIENT = _Client(project=self.PROJECT, connection=conn)
100+
metric = self._makeOne(self.METRIC_NAME, self.FILTER, client=CLIENT)
101+
self.assertFalse(metric.exists())
102+
self.assertEqual(len(conn._requested), 1)
103+
req = conn._requested[0]
104+
self.assertEqual(req['method'], 'GET')
105+
self.assertEqual(req['path'], '/%s' % FULL)
106+
107+
def test_exists_hit_w_alternate_client(self):
108+
FULL = 'projects/%s/metrics/%s' % (self.PROJECT, self.METRIC_NAME)
109+
conn1 = _Connection({'name': FULL})
110+
CLIENT1 = _Client(project=self.PROJECT, connection=conn1)
111+
conn2 = _Connection({'name': FULL})
112+
CLIENT2 = _Client(project=self.PROJECT, connection=conn2)
113+
metric = self._makeOne(self.METRIC_NAME, self.FILTER, client=CLIENT1)
114+
self.assertTrue(metric.exists(client=CLIENT2))
115+
self.assertEqual(len(conn1._requested), 0)
116+
self.assertEqual(len(conn2._requested), 1)
117+
req = conn2._requested[0]
118+
self.assertEqual(req['method'], 'GET')
119+
self.assertEqual(req['path'], '/%s' % FULL)
120+
96121

97122
class _Connection(object):
98123

0 commit comments

Comments
 (0)