Skip to content

Commit afc6ec2

Browse files
#1602 got objectFilter kinda working, at least for simple things. Need to figure out how to deal with href entries though
1 parent 9715c0b commit afc6ec2

2 files changed

Lines changed: 40 additions & 7 deletions

File tree

SoftLayer/transports/soap.py

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ def __init__(self, endpoint_url=None, timeout=None, proxy=None, user_agent=None,
4040
self.verify = verify
4141
self._client = None
4242
self.history = HistoryPlugin()
43+
self.soapNS = "http://api.service.softlayer.com/soap/v3.1/"
4344

4445
def __call__(self, request):
4546
"""Makes a SoftLayer API call against the SOAP endpoint.
@@ -55,29 +56,49 @@ def __call__(self, request):
5556
# MUST define headers like this because otherwise the objectMask header doesn't work
5657
# because it isn't sent in with a namespace.
5758
xsdUserAuth = xsd.Element(
58-
'{http://api.softlayer.com/soap/v3/}authenticate',
59+
f"{{{self.soapNS}}}authenticate",
5960
xsd.ComplexType([
60-
xsd.Element('{http://api.service.softlayer.com/soap/v3/}username', xsd.String()),
61-
xsd.Element('{http://api.service.softlayer.com/soap/v3/}apiKey', xsd.String())
61+
xsd.Element(f'{{{self.soapNS}}}username', xsd.String()),
62+
xsd.Element(f'{{{self.soapNS}}}apiKey', xsd.String())
6263
])
6364
)
65+
factory = client.type_factory(f"{self.soapNS}")
66+
theMask = client.get_type(f"{{{self.soapNS}}}SoftLayer_ObjectMask")
6467
xsdMask = xsd.Element(
6568
'{http://api.service.softlayer.com/soap/v3.1/}SoftLayer_ObjectMask',
69+
factory['SoftLayer_ObjectMask']
70+
)
71+
72+
# Object Filter
73+
filterType = client.get_type(f"{{{self.soapNS}}}{request.service}ObjectFilter")
74+
xsdFilter = xsd.Element(
75+
f"{{{self.soapNS}}}{request.service}ObjectFilter", filterType
76+
)
77+
78+
# Result Limit
79+
xsdResultLimit = xsd.Element(
80+
f"{{{self.soapNS}}}resultLimit",
6681
xsd.ComplexType([
67-
xsd.Element('mask', xsd.String()),
82+
xsd.Element('limit', xsd.String()),
83+
xsd.Element('offset', xsd.String()),
6884
])
6985
)
7086

87+
test = {"type":{"keyName":{"operation":"BARE_METAL_CPU"}} }
7188
headers = [
7289
xsdMask(mask=request.mask or ''),
73-
xsdUserAuth(username=request.transport_user, apiKey=request.transport_password)
90+
xsdUserAuth(username=request.transport_user, apiKey=request.transport_password),
91+
xsdResultLimit(limit=2, offset=0),
92+
xsdFilter(**request.filter or '') # The ** here forces python to treat this dict as properties
7493
]
7594

7695
pp(headers)
7796
print("HEADERS ^^^^^")
7897
method = getattr(client.service, request.method)
79-
result = client.service.getObject(_soapheaders=headers)
80-
return serialize_object(result)
98+
99+
# result = client.service.getObject(_soapheaders=headers)
100+
result = method(_soapheaders=headers)
101+
return serialize_object(result['body']['getAllObjectsReturn'])
81102
# result = transport.post(f"{self.endpoint_url}/{request.service}")
82103

83104

tests/transports/soap_tests.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,3 +78,15 @@ def test_objectMask(self):
7878
self.assertIsNone(data.get('address1'))
7979
self.assertEqual(data.get('id'), 307608)
8080

81+
def test_objectFilter(self):
82+
self.request.service = "SoftLayer_Product_Package"
83+
self.request.method = "getAllObjects"
84+
self.request.mask = "mask[id,description,keyName,type[id,keyName],name]"
85+
self.request.filter = {'type': {'keyName': {'operation': 'BARE_METAL_CPU'}}}
86+
data = self.transport(self.request)
87+
# pp(data)
88+
# print("^^^ DATA **** ")
89+
for package in data:
90+
pp(package)
91+
print("^^^ PACKAGE **** ")
92+
self.assertEqual(package.get('type').get('keyName'), "BARE_METAL_CPU")

0 commit comments

Comments
 (0)