Skip to content

Commit

Permalink
Merge branch 'master' of github.com:cluther/cisco_ssapi
Browse files Browse the repository at this point in the history
  • Loading branch information
cluther committed Jun 7, 2010
2 parents 9ca8d27 + c0145e2 commit 12ab081
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 31 deletions.
61 changes: 31 additions & 30 deletions cisco_ssapi/eox.py
Expand Up @@ -22,11 +22,11 @@

import re
import socket
import sys
import threading
from httplib import HTTPSConnection
from optparse import OptionParser
from xml.dom.minidom import parseString
from xml.parsers.expat import ExpatError


EOX_SERVER = "wsgx.cisco.com"
Expand Down Expand Up @@ -206,7 +206,7 @@ def getResults(self, action, method, body):
</ns:%s>
""" % (method, body, method)

ns, xml = self.soapCall(action, method, body, bulk=False)
ns, xml = self.soapCall(action, body, bulk=False)

count = 0
for eoxRecord in xml.getElementsByTagName('%s:EOXRecord' % ns):
Expand Down Expand Up @@ -245,7 +245,7 @@ def getPaginatedResults(self, action, method, body, page=1):
</ns:%s>
""" % (method, body, page, method)

ns, xml = self.soapCall(action, method, local_body, bulk=True)
ns, xml = self.soapCall(action, local_body, bulk=True)
lastIndex = int(xml.getElementsByTagName(
'%s:LastIndex' % ns)[0].childNodes[0].data)

Expand All @@ -272,46 +272,45 @@ def getPaginatedResults(self, action, method, body, page=1):
thread.start()


def soapCall(self, action, method, body, bulk=False):
def soapCall(self, action, body, bulk=False):
headers = self._headers
headers.update({'SOAPAction': action})
body = SOAP_TEMPLATE % body

error_text = 'An unknown error occurred'
for i in range(10):
xml_string = None
xml = None
xml_string = None
xml = None

# Handle up to 10 timeouts.
# Handle up to 10 timeouts.
for _i in range(10):
try:
conn = HTTPSConnection(EOX_SERVER, 443)
conn.request(
"POST", bulk and EOX_URL_BULK or EOX_URL, body, headers)
response = conn.getresponse()
xml_string = response.read()
except socket.timeout:
error_text = 'Timeout on Cisco SSAPI server'
continue

# Handle bad XML coming back.
try:
xml = parseString(xml_string)
except ExpatError, ex:
error_text = str(ex)
break

# Handle generic SOAP errors.
error_details = xml.getElementsByTagName('det:detailmessage')
if error_details:
error_text = error_details[0].childNodes[0].data
break
except socket.timeout:
pass
else:
raise EOXException("Timeout on Cisco SSAPI server")

# The XMLNS keeps changing. Figure it out dynamically.
match = re.search(r' xmlns:(axis[^=]+)', xml_string)
if match:
return (match.group(1), xml)

raise EOXException(error_text)
# Handle bad XML coming back.
try:
xml = parseString(xml_string)
except ExpatError, ex:
raise EOXException(ex)

# Handle generic SOAP errors.
error_details = xml.getElementsByTagName('det:detailmessage')
if error_details:
raise EOXException(error_details[0].childNodes[0].data)

# The XMLNS keeps changing. Figure it out dynamically.
match = re.search(r' xmlns:(axis[^=]+)', xml_string)
if match:
return (match.group(1), xml)
else:
raise EOXException("No axis xmlns in response")


class PagingThread(threading.Thread):
Expand All @@ -321,6 +320,8 @@ def __init__(self, eox, action, method, body, page):
self._method = method
self._body = body
self._page = page
self._ns = None
self._xml = None
threading.Thread.__init__(self)

def run(self):
Expand Down
2 changes: 1 addition & 1 deletion cisco_ssapi/scripts.py
Expand Up @@ -39,7 +39,7 @@ def usage(msg=None):
help='Start date (MM/DD/YYYY)')
parser.add_option('-e', '--end', dest='end',
help='End date (MM/DD/YYYY)')
(options, args) = parser.parse_args()
options = parser.parse_args()[0]

if not options.username:
usage("You must specify your EOX username.")
Expand Down

0 comments on commit 12ab081

Please sign in to comment.