Skip to content

Commit 6a1e4a3

Browse files
authored
Detect rest transport (#747)
* Adds condition to check for a rest endpoint url * Fixes bug that ocurrs if endpoint_url isn't specified * Adds test to verify that rest URLs are detected properly
1 parent dbc6371 commit 6a1e4a3

2 files changed

Lines changed: 32 additions & 7 deletions

File tree

SoftLayer/API.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,14 +85,24 @@ def create_client_from_env(username=None,
8585
proxy=proxy,
8686
config_file=config_file)
8787

88-
# Default the transport to use XMLRPC
8988
if transport is None:
90-
transport = transports.XmlRpcTransport(
91-
endpoint_url=settings.get('endpoint_url'),
92-
proxy=settings.get('proxy'),
93-
timeout=settings.get('timeout'),
94-
user_agent=user_agent,
95-
)
89+
url = settings.get('endpoint_url')
90+
if url is not None and '/rest' in url:
91+
# If this looks like a rest endpoint, use the rest transport
92+
transport = transports.RestTransport(
93+
endpoint_url=settings.get('endpoint_url'),
94+
proxy=settings.get('proxy'),
95+
timeout=settings.get('timeout'),
96+
user_agent=user_agent,
97+
)
98+
else:
99+
# Default the transport to use XMLRPC
100+
transport = transports.XmlRpcTransport(
101+
endpoint_url=settings.get('endpoint_url'),
102+
proxy=settings.get('proxy'),
103+
timeout=settings.get('timeout'),
104+
user_agent=user_agent,
105+
)
96106

97107
# If we have enough information to make an auth driver, let's do it
98108
if auth is None and settings.get('username') and settings.get('api_key'):

tests/api_tests.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,21 @@ def test_init(self):
2525
self.assertIsInstance(client.transport, transports.XmlRpcTransport)
2626
self.assertEqual(client.transport.timeout, 10)
2727

28+
def test_init_with_rest_url(self):
29+
client = SoftLayer.Client(username='doesnotexist',
30+
api_key='issurelywrong',
31+
timeout=10,
32+
endpoint_url='http://example.com/v3/rest/')
33+
34+
self.assertIsInstance(client.auth, SoftLayer.BasicHTTPAuthentication)
35+
self.assertEqual(client.auth.username, 'doesnotexist')
36+
self.assertEqual(client.auth.api_key, 'issurelywrong')
37+
self.assertIsNotNone(client.transport)
38+
self.assertIsInstance(client.transport, transports.RestTransport)
39+
self.assertEqual(client.transport.endpoint_url,
40+
'http://example.com/v3/rest')
41+
self.assertEqual(client.transport.timeout, 10)
42+
2843
@mock.patch('SoftLayer.config.get_client_settings')
2944
def test_env(self, get_client_settings):
3045
auth = mock.Mock()

0 commit comments

Comments
 (0)