I've been trying to use the query() method of the AutotaskAPI which uses QueryXML. In order to do this, I understand I have to use the ATWSResponse type in order to receive results. This is my code:
class ConnectATWS():
def __init__(self):
#Connect to server with the credentials
app_config = Init()
self.username = app_config.data["Username"]
self.password = app_config.data["Password"]
self.login_id = app_config.data["LoginID"]
self.url = app_config.data["AutotaskUpdateTicketEstimatedHours_net_autotask_webservices5_ATWS"]
strCurrentID = "0"
strCriteria = "<condition><field>Status<expression op=""NotEqual"">5</expression></field></condition>"
strQuery = "<queryxml><entity>Ticket</entity><query>" + \
"<condition><field>id<expression op=""greaterthan"">" + strCurrentID + "</expression></field></condition>" + strCriteria + \
"<condition><field>EstimatedHours<expression op=""isnull""></expression></field></condition>" + \
"</query></queryxml>"
client = Client(self.url + "?WSDL", username=self.login_id, password=self.password)
response = client.service.query(strQuery)
Trying this returns the following error:
No handlers could be found for logger "suds.client"
Traceback (most recent call last):
File "/Users/AAAA/Documents/Aptana/AutotaskUpdateTicketEstimatedHours/Main.py", line 46, in <module>
handler = ConnectATWS()
File "/Users/AAAA/Documents/Aptana/AutotaskUpdateTicketEstimatedHours/Main.py", line 40, in __init__
response = client.service.query(strQuery)
File "/Library/Python/2.7/site-packages/suds/client.py", line 542, in __call__
return client.invoke(args, kwargs)
File "/Library/Python/2.7/site-packages/suds/client.py", line 602, in invoke
result = self.send(soapenv)
File "/Library/Python/2.7/site-packages/suds/client.py", line 649, in send
result = self.failed(binding, e)
File "/Library/Python/2.7/site-packages/suds/client.py", line 708, in failed
raise Exception((status, reason))
Exception: (307, u'Temporary Redirect')
I know I'm not properly calling the method. How can i call the AutotaskAPI with the QueryXML and ATWSResponse type?
For reference, this is the AutotaskAPI documentation: https://support.netserve365.com/help/Content/Userguides/T_WebServicesAPIv1_5.pdf
UPDATE:
Using Bodsda's suggestion, my complete code looks like this:
import os, sys
import xml.etree.ElementTree as ET
from suds.client import Client
from suds.sax.element import Element
class Init():
def __init__(self):
#Search the app.config file for all data to be used
script_dir = os.path.dirname(__file__)
file_path = "app.config"
abs_file_path = os.path.join(script_dir, file_path)
tree = ET.parse(abs_file_path)
root = tree.getroot()
sites = root.iter('AutotaskUpdateTicketEstimatedHours.My.MySettings')
self.data = {}
for site in sites:
apps = site.findall('setting')
for app in apps:
self.data[app.get('name')] = app.find('value').text
class ConnectATWS():
def __init__(self):
#Connect to server with the credentials
app_config = Init()
self.username = app_config.data["Username"]
self.password = app_config.data["Password"]
self.login_id = app_config.data["LoginID"]
self.url = app_config.data["AutotaskUpdateTicketEstimatedHours_net_autotask_webservices5_ATWS"]
strQuery = """
<queryxml>
<entity>Ticket</entity>
<query>
<condition>
<field>Id
<expression op="GreaterThan">0</expression>
</field>
</condition>
<condition>
<field>Status
<expression op="NotEqual">5</expression>
</field>
</condition>
<condition>
<field>EstimatedHours
<expression op="IsNull"></expression>
</field>
</condition>
</query>
</queryxml>"""
client = Client(self.url + "?WSDL", username=self.login_id, password=self.password)
#obj = client.factory.create('ATWSResponse')
response = client.service.query(strQuery)
if response.ReturnCode != 1:
print "Error code: %s" % response.ReturnCode
print "Error response: %s" % response.Errors
sys.exit(1)
else:
os.system("clear")
print "Query successful..."
print "============================="
print response.EntityResults
if __name__ == '__main__':
handler = ConnectATWS()