Skip to content

Commit dd6bfb7

Browse files
authored
Merge pull request mtalexan#35 from fahrenberger/master
Token authentication
2 parents 14e1a23 + 4f5f35a commit dd6bfb7

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

v1pysdk/client.py

+24-5
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,21 @@ class V1AssetNotFoundError(V1Error): pass
4747
class V1Server(object):
4848
"Accesses a V1 HTTP server as a client of the XML API protocol"
4949

50-
def __init__(self, address="localhost", instance="VersionOne.Web", username='', password='', scheme="http", instance_url=None, logparent=None, loglevel=logging.ERROR):
50+
def __init__(self, address="localhost", instance="VersionOne.Web", username='', password='', token=None, scheme="http", instance_url=None, logparent=None, loglevel=logging.ERROR):
51+
"""
52+
If *instance_url* is set its value will override address, instance,
53+
scheme and object's instance_url attributes.
54+
If *token* is not None a HTTP header will be added to each request.
55+
:param address: target hostname
56+
:param instance: instance
57+
:param username: credentials (username)
58+
:param password: credentials (password)
59+
:param token: credentials (authentication token)
60+
:param scheme: HTTP scheme
61+
:param instance_url: instance URL
62+
:param logparent: logger prefix
63+
:param loglevel: logging level
64+
"""
5165
if instance_url:
5266
self.instance_url = instance_url
5367
parsed = urlparse(instance_url)
@@ -66,14 +80,19 @@ def __init__(self, address="localhost", instance="VersionOne.Web", username='',
6680
self.logger.setLevel(loglevel)
6781
self.username = username
6882
self.password = password
83+
self.token = token
6984
self._install_opener()
7085

7186
def _install_opener(self):
7287
base_url = self.build_url('')
73-
password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()
74-
password_manager.add_password(None, base_url, self.username, self.password)
75-
handlers = [HandlerClass(password_manager) for HandlerClass in AUTH_HANDLERS]
76-
self.opener = urllib2.build_opener(*handlers)
88+
if self.token:
89+
self.opener = urllib2.build_opener()
90+
self.opener.addheaders.append( ('Authorization', 'Bearer {token}'.format(token=self.token)) )
91+
else:
92+
password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()
93+
password_manager.add_password(None, base_url, self.username, self.password)
94+
handlers = [HandlerClass(password_manager) for HandlerClass in AUTH_HANDLERS]
95+
self.opener = urllib2.build_opener(*handlers)
7796
self.opener.add_handler(HTTPCookieProcessor())
7897

7998
def http_get(self, url):

0 commit comments

Comments
 (0)