I'm using Python zeep to use SOAP to interact with Salesforce's Metadata API.
I'm attempting to start with the simplest thing possible, just log in and read a metadata object.
from zeep import Client as zClient
client = zClient('sf_config/sf_metadata_40.xml')
// readMetadata method exists, prints <zeep.client.OperationProxy object at ...>
print client.service.readMetadata
// errors because login method does not exist
print client.service.login
I know the zeep client reads the XML because it correctly knows that readMetadata
exists, but I'm confused about how I am supposed to log in with my Salesforce username and password. I expected a login
method to exist.
Additionally, I tried adding username and password to the construction of the client
object:
from zeep.wsse.username import UsernameToken
client = zClient('sf_config/sf_metadata_40.xml',
wsse=UsernameToken('bub@bob.com', 'scary_secretPassW*rd'))
but it was unsuccessful, in that, executing the readMetadata
method caused this error:
Fault: UNKNOWN_EXCEPTION: Destination URL not reset. The URL returned from login must be set in the SforceService
(The Java examples in Salesforce docs use a connection
object that I'm not really sure what the Python zeep equivalent would be, so I don't have an example to go off of.)
UPDATE:
That error brings this to mind, from the docs:
Retrieve the metadataServerUrl from the LoginResult returned by your SOAP API login() call.
But I'm not sure what the login()
call is, since such a method does not exist on the client.service
.