Merge "Allow global_request_id in Client constructor"
This commit is contained in:
@@ -40,6 +40,7 @@ osprofiler_web = importutils.try_import("osprofiler.web")
|
|||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
USER_AGENT = 'python-glanceclient'
|
USER_AGENT = 'python-glanceclient'
|
||||||
CHUNKSIZE = 1024 * 64 # 64kB
|
CHUNKSIZE = 1024 * 64 # 64kB
|
||||||
|
REQ_ID_HEADER = 'X-OpenStack-Request-ID'
|
||||||
|
|
||||||
|
|
||||||
def encode_headers(headers):
|
def encode_headers(headers):
|
||||||
@@ -130,6 +131,7 @@ class HTTPClient(_BaseHTTPClient):
|
|||||||
self.identity_headers = kwargs.get('identity_headers')
|
self.identity_headers = kwargs.get('identity_headers')
|
||||||
self.auth_token = kwargs.get('token')
|
self.auth_token = kwargs.get('token')
|
||||||
self.language_header = kwargs.get('language_header')
|
self.language_header = kwargs.get('language_header')
|
||||||
|
self.global_request_id = kwargs.get('global_request_id')
|
||||||
if self.identity_headers:
|
if self.identity_headers:
|
||||||
self.auth_token = self.identity_headers.pop('X-Auth-Token',
|
self.auth_token = self.identity_headers.pop('X-Auth-Token',
|
||||||
self.auth_token)
|
self.auth_token)
|
||||||
@@ -225,6 +227,9 @@ class HTTPClient(_BaseHTTPClient):
|
|||||||
if not headers.get('X-Auth-Token'):
|
if not headers.get('X-Auth-Token'):
|
||||||
headers['X-Auth-Token'] = self.auth_token
|
headers['X-Auth-Token'] = self.auth_token
|
||||||
|
|
||||||
|
if self.global_request_id:
|
||||||
|
headers.setdefault(REQ_ID_HEADER, self.global_request_id)
|
||||||
|
|
||||||
if osprofiler_web:
|
if osprofiler_web:
|
||||||
headers.update(osprofiler_web.get_trace_id_headers())
|
headers.update(osprofiler_web.get_trace_id_headers())
|
||||||
|
|
||||||
@@ -312,10 +317,14 @@ class SessionClient(adapter.Adapter, _BaseHTTPClient):
|
|||||||
def __init__(self, session, **kwargs):
|
def __init__(self, session, **kwargs):
|
||||||
kwargs.setdefault('user_agent', USER_AGENT)
|
kwargs.setdefault('user_agent', USER_AGENT)
|
||||||
kwargs.setdefault('service_type', 'image')
|
kwargs.setdefault('service_type', 'image')
|
||||||
|
self.global_request_id = kwargs.pop('global_request_id', None)
|
||||||
super(SessionClient, self).__init__(session, **kwargs)
|
super(SessionClient, self).__init__(session, **kwargs)
|
||||||
|
|
||||||
def request(self, url, method, **kwargs):
|
def request(self, url, method, **kwargs):
|
||||||
headers = kwargs.pop('headers', {})
|
headers = kwargs.pop('headers', {})
|
||||||
|
if self.global_request_id:
|
||||||
|
headers.setdefault(REQ_ID_HEADER, self.global_request_id)
|
||||||
|
|
||||||
kwargs['raise_exc'] = False
|
kwargs['raise_exc'] = False
|
||||||
data = self._set_common_request_kwargs(headers, kwargs)
|
data = self._set_common_request_kwargs(headers, kwargs)
|
||||||
try:
|
try:
|
||||||
|
@@ -15,6 +15,7 @@
|
|||||||
import functools
|
import functools
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
import uuid
|
||||||
|
|
||||||
import fixtures
|
import fixtures
|
||||||
from keystoneauth1 import session
|
from keystoneauth1 import session
|
||||||
@@ -151,6 +152,18 @@ class TestClient(testtools.TestCase):
|
|||||||
headers = self.mock.last_request.headers
|
headers = self.mock.last_request.headers
|
||||||
self.assertEqual(kwargs['language_header'], headers['Accept-Language'])
|
self.assertEqual(kwargs['language_header'], headers['Accept-Language'])
|
||||||
|
|
||||||
|
def test_request_id_header_passed(self):
|
||||||
|
global_id = encodeutils.safe_encode("req-%s" % uuid.uuid4())
|
||||||
|
kwargs = {'global_request_id': global_id}
|
||||||
|
http_client = http.HTTPClient(self.endpoint, **kwargs)
|
||||||
|
|
||||||
|
path = '/v2/images/my-image'
|
||||||
|
self.mock.get(self.endpoint + path)
|
||||||
|
http_client.get(path)
|
||||||
|
|
||||||
|
headers = self.mock.last_request.headers
|
||||||
|
self.assertEqual(global_id, headers['X-OpenStack-Request-ID'])
|
||||||
|
|
||||||
def test_language_header_not_passed_no_language(self):
|
def test_language_header_not_passed_no_language(self):
|
||||||
kwargs = {}
|
kwargs = {}
|
||||||
http_client = http.HTTPClient(self.endpoint, **kwargs)
|
http_client = http.HTTPClient(self.endpoint, **kwargs)
|
||||||
|
Reference in New Issue
Block a user