Пример #1
0
    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
Пример #2
0
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
Пример #3
0
    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
Пример #4
0
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