def getResponseDoc(self, params=None, opts=None): """ returns response as XmlRecord """ # print 'params: %s' % params # return XmlRecord(xml=self.getData(params, opts)) responseDoc = None try: # responseText = data.read() # responseText = unicode (data.read(), 'iso-8859-1') # universal? # responseText = unicode (data.read(), 'utf-8') # experimental 12/2/2010 data = self.getData(params, opts) # print data responseDoc = XmlRecord(xml=data) webResponseErrorNode = responseDoc.selectSingleNode( responseDoc.dom, 'DDSWebService:error') if webResponseErrorNode: errorCode = webResponseErrorNode.getAttribute('code') if errorCode == 'noRecordsMatch': return None print 'errorCode', errorCode raise SimpleClientError, XmlUtils.getText(webResponseErrorNode) except Exception, msg: ## self.error = ServiceError (sys.exc_info()) # self.error = ServiceError (["ServiceResponse: Could not parse XML", sys.exc_info()[1]]) raise SimpleClientError, "DDSClient: Could not parse XML: %s" % msg
class ServiceResponse: """ Contains either an error (ServiceError) or a response doc (as a XmlRecord) """ def __init__(self, data, exc_info=None, preprocessor=None): self.data = data self.error = None if exc_info: self.error = ServiceError(exc_info) self.doc = None if not exc_info: try: # responseText = data.read() # responseText = unicode (data.read(), 'iso-8859-1') # universal? responseText = unicode(data.read(), 'utf-8') # experimental 12/2/2010 # print "serviceClient: reponseText:\n%s" % responseText if preprocessor: responseText = preprocessor(responseText) self.doc = XmlRecord(xml=responseText) webResponseErrorNode = self.doc.selectSingleNode( self.doc.dom, 'DDSWebService:error') if webResponseErrorNode: self.error = XmlUtils.getText(webResponseErrorNode) except: ## self.error = ServiceError (sys.exc_info()) self.error = ServiceError([ "ServiceResponse: Could not parse XML", sys.exc_info()[1] ]) def hasError(self): return self.error
def parseResponse(self, xml): """ check for error in response and raise error if found otherwise, return response as XmlRecord """ if self.verbose: print "parseResponse" print "\n***********************\n%s\n********************" % xml rec = XmlRecord(xml=xml) # print rec errorEl = rec.selectSingleNode(rec.dom, "DCSWebService:error") if errorEl: if self.verbose: print rec raise DCSWebServiceClientError, "Service Error: %s" % XmlUtils.getText( errorEl) return rec
class FieldsListMaker: def __init__(self, xmlFormat, version): self.xmlFormat = xmlFormat self.version = version self.fieldsDir = os.path.join(baseDir, self.xmlFormat, self.version, "fields") self.rec = XmlRecord(xml=template) if not os.path.exists(self.fieldsDir): raise "FileDoesNotExist", self.fieldsDir self.buildDir = os.path.join(baseDir, self.xmlFormat, self.version, "build") if not os.path.exists(self.fieldsDir): raise "FileDoesNotExist", self.fieldsDir print "fieldsDir: %s\nbuildDir: %s" % (self.fieldsDir, self.buildDir) self.addFieldsFiles() def addFieldsFiles(self): filesElement = self.rec.selectSingleNode(self.rec.doc, "files") if not filesElement: raise Exception, "Files element not found" for fieldsFile in self.getFieldsFileNames(): text = "/".join( [self.xmlFormat, self.version, "fields", fieldsFile]) XmlUtils.addChild(self.rec.dom, "file", text, filesElement) def getFieldsFileNames(self): names = [] for filename in os.listdir(self.fieldsDir): names.append(filename) return names def write(self): path = os.path.join(self.buildDir, "fields-list.xml") fp = open(path, 'w') fp.write(self.rec.dom.toprettyxml(" ")) fp.close() print "wrote to %s" % path