Skip to content

Commit 704b906

Browse files
authored
Improve retrieval of customer ID in logging interceptor (googleads#262)
1 parent b3768da commit 704b906

File tree

3 files changed

+43
-1
lines changed

3 files changed

+43
-1
lines changed

ChangeLog

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
* 5.0.4
2+
- Enable logging interceptor to retrieve customer ID from resource_name.
3+
14
* 5.0.3
25
- Fix bug in generated init files preventing import *.
36

google/ads/google_ads/interceptors/logging_interceptor.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,15 @@ def _get_customer_id(self, request):
117117
Args:
118118
request: An instance of a request proto message.
119119
"""
120-
return getattr(request, 'customer_id', None)
120+
if hasattr(request, 'customer_id'):
121+
return getattr(request, 'customer_id')
122+
elif hasattr(request, 'resource_name'):
123+
resource_name = getattr(request, 'resource_name')
124+
segments = resource_name.split('/')
125+
if segments[0] == 'customers':
126+
return segments[1]
127+
else:
128+
return None
121129

122130
def _parse_exception_to_str(self, exception):
123131
"""Parses response exception object to str for logging.

tests/interceptors/logging_interceptor_test.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
from google.ads.google_ads import client as Client
2424
from google.ads.google_ads.interceptors import LoggingInterceptor
25+
from google.ads.google_ads.v3.proto.services import customer_service_pb2
2526

2627
default_version = Client._DEFAULT_VERSION
2728

@@ -530,3 +531,33 @@ def test_get_fault_message_transport_failure(self):
530531
interceptor = self._create_test_interceptor()
531532
result = interceptor._get_fault_message(mock_exception)
532533
self.assertEqual(result, self._MOCK_TRANSPORT_ERROR_MESSAGE)
534+
535+
def test_get_customer_id_not_present(self):
536+
"""Returns None if request has no customer_id or resource_name."""
537+
mock_request = {}
538+
interceptor = self._create_test_interceptor()
539+
self.assertEqual(interceptor._get_customer_id(mock_request), None)
540+
541+
def test_get_customer_id(self):
542+
"""Retrieves a customer_id from a request object."""
543+
mock_request = self._get_mock_request()
544+
interceptor = self._create_test_interceptor()
545+
self.assertEqual(interceptor._get_customer_id(mock_request),
546+
self._MOCK_CUSTOMER_ID)
547+
548+
def test_get_customer_id_from_resource_name(self):
549+
"""Retrieves a customer_id from a request object via resource_name."""
550+
resource_name = f'customers/{self._MOCK_CUSTOMER_ID}'
551+
mock_request = customer_service_pb2.GetCustomerRequest(
552+
resource_name=resource_name)
553+
interceptor = self._create_test_interceptor()
554+
self.assertEqual(interceptor._get_customer_id(mock_request),
555+
self._MOCK_CUSTOMER_ID)
556+
557+
def test_get_customer_id_from_invalid_resource_name(self):
558+
"""Returns None for a resource_name not starting with 'customers'."""
559+
resource_name = f'languageConstants/{self._MOCK_CUSTOMER_ID}'
560+
mock_request = customer_service_pb2.GetCustomerRequest(
561+
resource_name=resource_name)
562+
interceptor = self._create_test_interceptor()
563+
self.assertEqual(interceptor._get_customer_id(mock_request), None)

0 commit comments

Comments
 (0)