Send keystoneauth a better user-agent string
When we moved to keystoneauth sessions from our own handwritten session class, we lost the nice user-agent string we built up. That was then added to keystoneauth and has now been released in version 2.2.0, which we picked up. That implementation provides a good base for us to build on, and we should now send our own version string as well as make way for callers to submit their application's name/version string as well. Change-Id: I439b0912b27a37c4ddfc91447a5f3394df2d0385
This commit is contained in:
@@ -20,7 +20,9 @@ from six.moves.urllib import parse
|
|||||||
|
|
||||||
from keystoneauth1 import session as _session
|
from keystoneauth1 import session as _session
|
||||||
|
|
||||||
|
import openstack
|
||||||
|
|
||||||
|
DEFAULT_USER_AGENT = "openstacksdk/%s" % openstack.__version__
|
||||||
VERSION_PATTERN = re.compile('/v\d[\d.]*')
|
VERSION_PATTERN = re.compile('/v\d[\d.]*')
|
||||||
|
|
||||||
|
|
||||||
@@ -40,16 +42,27 @@ def parse_url(filt, url):
|
|||||||
|
|
||||||
class Session(_session.Session):
|
class Session(_session.Session):
|
||||||
|
|
||||||
def __init__(self, profile, **kwargs):
|
def __init__(self, profile, user_agent=None, **kwargs):
|
||||||
"""Create a new Keystone auth session with a profile.
|
"""Create a new Keystone auth session with a profile.
|
||||||
|
|
||||||
:param profile: If the user has any special profiles such as the
|
:param profile: If the user has any special profiles such as the
|
||||||
service name, region, version or interface, they may be provided
|
service name, region, version or interface, they may be provided
|
||||||
in the profile object. If no profiles are provided, the
|
in the profile object. If no profiles are provided, the
|
||||||
services that appear first in the service catalog will be used.
|
services that appear first in the service catalog will be used.
|
||||||
|
:param user_agent: A User-Agent header string to use for the
|
||||||
|
request. If not provided, a default of
|
||||||
|
:attr:`~openstack.session.DEFAULT_USER_AGENT`
|
||||||
|
is used, which contains the openstacksdk version
|
||||||
|
When a non-None value is passed, it will be
|
||||||
|
prepended to the default.
|
||||||
:type profile: :class:`~openstack.profile.Profile`
|
:type profile: :class:`~openstack.profile.Profile`
|
||||||
"""
|
"""
|
||||||
super(Session, self).__init__(**kwargs)
|
if user_agent is not None:
|
||||||
|
self.user_agent = "%s %s" % (user_agent, DEFAULT_USER_AGENT)
|
||||||
|
else:
|
||||||
|
self.user_agent = DEFAULT_USER_AGENT
|
||||||
|
super(Session, self).__init__(user_agent=self.user_agent, **kwargs)
|
||||||
|
|
||||||
self.profile = profile
|
self.profile = profile
|
||||||
|
|
||||||
def get_endpoint(self, auth=None, interface=None, **kwargs):
|
def get_endpoint(self, auth=None, interface=None, **kwargs):
|
||||||
|
|||||||
@@ -33,3 +33,11 @@ class TestSession(testtools.TestCase):
|
|||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
"http://127.0.0.1:9292/wot/v1/mytenant",
|
"http://127.0.0.1:9292/wot/v1/mytenant",
|
||||||
session.parse_url(filt, "http://127.0.0.1:9292/wot/v2.0/mytenant"))
|
session.parse_url(filt, "http://127.0.0.1:9292/wot/v2.0/mytenant"))
|
||||||
|
|
||||||
|
def test_user_agent_none(self):
|
||||||
|
sot = session.Session(None)
|
||||||
|
self.assertTrue(sot.user_agent.startswith("openstacksdk"))
|
||||||
|
|
||||||
|
def test_user_agent_set(self):
|
||||||
|
sot = session.Session(None, user_agent="testing/123")
|
||||||
|
self.assertTrue(sot.user_agent.startswith("testing/123 openstacksdk"))
|
||||||
|
|||||||
Reference in New Issue
Block a user