1111from zeep import Client , Settings , Transport , xsd
1212from zeep .helpers import serialize_object
1313from zeep .cache import SqliteCache
14+ from zeep .plugins import HistoryPlugin
1415
1516import requests
1617
@@ -31,43 +32,51 @@ def __init__(self, endpoint_url=None, timeout=None, proxy=None, user_agent=None,
3132
3233 # Throw an error for py < 3.6 because of f-strings
3334 logging .getLogger ('zeep' ).setLevel (logging .ERROR )
35+ logging .getLogger ('zeep.transports' ).setLevel (logging .DEBUG )
3436 self .endpoint_url = (endpoint_url or consts .API_PUBLIC_ENDPOINT ).rstrip ('/' )
3537 self .timeout = timeout or None
3638 self .proxy = proxy
3739 self .user_agent = user_agent or consts .USER_AGENT
3840 self .verify = verify
3941 self ._client = None
42+ self .history = HistoryPlugin ()
4043
4144 def __call__ (self , request ):
4245 """Makes a SoftLayer API call against the SOAP endpoint.
4346
4447 :param request request: Request object
4548 """
46- print ("Making a SOAP API CALL..." )
47- # client = Client(f"{self.endpoint_url}/{request.service}?wsdl")
49+
4850 zeep_settings = Settings (strict = False , xml_huge_tree = True )
4951 zeep_transport = Transport (cache = SqliteCache (timeout = 86400 ))
5052 client = Client (f"{ self .endpoint_url } /{ request .service } ?wsdl" ,
51- settings = zeep_settings , transport = zeep_transport )
52- # authXsd = xsd.Element(
53- # f"{self.endpoint_url}/authenticate",
54- # xsd.ComplexType([
55- # xsd.Element(f"{self.endpoint_url}/username", xsd.String()),
56- # xsd.Element(f"{self.endpoint_url}/apiKey", xsd.String())
57- # ])
58- # )
53+ settings = zeep_settings , transport = zeep_transport , plugins = [self .history ])
54+
55+ # MUST define headers like this because otherwise the objectMask header doesn't work
56+ # because it isn't sent in with a namespace.
5957 xsdUserAuth = xsd .Element (
60- '{http://api.softlayer.com/soap/v3.1 /}authenticate' ,
58+ '{http://api.softlayer.com/soap/v3/}authenticate' ,
6159 xsd .ComplexType ([
62- xsd .Element ('{http://api.softlayer.com/soap/v3.1 /}username' , xsd .String ()),
63- xsd .Element ('{http://api.softlayer.com/soap/v3.1 /}apiKey' , xsd .String ())
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 ())
6462 ])
6563 )
66- # transport = Transport(session=get_session())
67-
68- authHeader = xsdUserAuth (username = request .transport_user , apiKey = request .transport_password )
64+ xsdMask = xsd .Element (
65+ '{http://api.service.softlayer.com/soap/v3.1/}SoftLayer_ObjectMask' ,
66+ xsd .ComplexType ([
67+ xsd .Element ('mask' , xsd .String ()),
68+ ])
69+ )
70+
71+ headers = [
72+ xsdMask (mask = request .mask or '' ),
73+ xsdUserAuth (username = request .transport_user , apiKey = request .transport_password )
74+ ]
75+
76+ pp (headers )
77+ print ("HEADERS ^^^^^" )
6978 method = getattr (client .service , request .method )
70- result = client .service .getObject (_soapheaders = [ authHeader ] )
79+ result = client .service .getObject (_soapheaders = headers )
7180 return serialize_object (result )
7281 # result = transport.post(f"{self.endpoint_url}/{request.service}")
7382
@@ -80,4 +89,4 @@ def print_reproduceable(self, request):
8089 :param request request: Request object
8190 """
8291
83- return "THE SOAP API CALL..."
92+ return self . history . last_sent
0 commit comments