Skip to content

Commit

Permalink
Added get_total_items to SoftLayerListResult to make figuring out how…
Browse files Browse the repository at this point in the history
… many results were returned a bit easier
  • Loading branch information
allmightyspiff committed Oct 4, 2024
1 parent 7b7446b commit 1d64f95
Show file tree
Hide file tree
Showing 8 changed files with 23 additions and 7 deletions.
4 changes: 2 additions & 2 deletions .secrets.baseline
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"files": "^.secrets.baseline$",
"lines": null
},
"generated_at": "2024-04-25T01:18:20Z",
"generated_at": "2024-10-04T22:18:14Z",
"plugins_used": [
{
"name": "AWSKeyDetector"
Expand Down Expand Up @@ -720,7 +720,7 @@
"hashed_secret": "9878e362285eb314cfdbaa8ee8c300c285856810",
"is_secret": false,
"is_verified": false,
"line_number": 323,
"line_number": 324,
"type": "Secret Keyword",
"verified_result": null
}
Expand Down
7 changes: 6 additions & 1 deletion SoftLayer/transports/fixture.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

import importlib

from .transport import SoftLayerListResult


class FixtureTransport(object):
"""Implements a transport which returns fixtures."""
Expand All @@ -21,7 +23,10 @@ def __call__(self, call):
message = f'{call.service} fixture is not implemented'
raise NotImplementedError(message) from ex
try:
return getattr(module, call.method)
result = getattr(module, call.method)
if isinstance(result, list):
return SoftLayerListResult(result, len(result))
return result
except AttributeError as ex:
message = f'{call.service}::{call.method} fixture is not implemented'
raise NotImplementedError(message) from ex
Expand Down
3 changes: 1 addition & 2 deletions SoftLayer/transports/rest.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,7 @@ def __call__(self, request):
request.result = result

if isinstance(result, list):
return SoftLayerListResult(
result, int(resp.headers.get('softlayer-total-items', 0)))
return SoftLayerListResult(result, int(resp.headers.get('softlayer-total-items', 0)))
else:
return result
except requests.HTTPError as ex:
Expand Down
4 changes: 4 additions & 0 deletions SoftLayer/transports/transport.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,10 @@ def __init__(self, items=None, total_count=0):
self.total_count = total_count
super().__init__(items)

def get_total_items(self):
"""A simple getter to totalCount, but its called getTotalItems since that is the header returned"""
return self.total_count


def _proxies_dict(proxy):
"""Makes a proxy dict appropriate to pass to requests."""
Expand Down
3 changes: 1 addition & 2 deletions SoftLayer/transports/xmlrpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,7 @@ def __call__(self, request):
resp.raise_for_status()
result = xmlrpc.client.loads(resp.content)[0][0]
if isinstance(result, list):
return SoftLayerListResult(
result, int(resp.headers.get('softlayer-total-items', 0)))
return SoftLayerListResult(result, int(resp.headers.get('softlayer-total-items', 0)))
else:
return result
except xmlrpc.client.Fault as ex:
Expand Down
1 change: 1 addition & 0 deletions tests/transports/rest_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ def test_basic(self, request):
self.assertEqual(resp, [])
self.assertIsInstance(resp, transports.SoftLayerListResult)
self.assertEqual(resp.total_count, 10)
self.assertEqual(resp.get_total_items(), 10)
request.assert_called_with(
'GET', 'http://something9999999999999999999999.com/SoftLayer_Service/Resource.json',
headers=mock.ANY,
Expand Down
7 changes: 7 additions & 0 deletions tests/transports/transport_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,13 @@ def test_basic(self):
resp = self.transport(req)
self.assertEqual(resp['accountId'], 1234)

def test_total_items(self):
req = transports.Request()
req.service = 'SoftLayer_Account'
req.method = 'getHardware'
resp = self.transport(req)
self.assertEqual(resp.get_total_items(), 4)

def test_no_module(self):
req = transports.Request()
req.service = 'Doesnt_Exist'
Expand Down
1 change: 1 addition & 0 deletions tests/transports/xmlrpc_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -409,6 +409,7 @@ def test_nonascii_characters(self, request):
self.assertEqual(resp, [])
self.assertIsInstance(resp, transports.SoftLayerListResult)
self.assertEqual(resp.total_count, 10)
self.assertEqual(resp.get_total_items(), 10)


@mock.patch('SoftLayer.transports.xmlrpc.requests.Session.request')
Expand Down

0 comments on commit 1d64f95

Please sign in to comment.