def __call__()

in modules/wsgi/httputil.py [0:0]


    def __call__(self, func, *args):
        print >> stderr, "Client proxy call", func, args

        # Connect to the configured URL
        c, headers = connect(self.url)

        # handle a GET request
        if func == "get":
            u = requesturi(self.url, car(args))
            print >> stderr, "Client GET request", u
            c.request("GET", u, None, headers)
            res = c.getresponse()
            print >> stderr, "Client status", res.status
            if res.status != 200:
                return None
            ct = res.getheader("Content-type", "text/plain")
            ls = (res.read(),)

            if atomutil.isATOMEntry(ls):
                # Read an ATOM entry
                v = atomutil.entryValue(atomutil.readATOMEntry(ls))
                print >> stderr, "Client result", v
                return v

            if contains(ct, "application/atom+xml") or atomutil.isATOMFeed(ls):
                # Read an ATOM feed
                v = atomutil.feedValues(atomutil.readATOMFeed(ls))
                print >> stderr, "Client result", v
                return v

            if contains(ct, "application/rss+xml") or rssutil.isRSSFeed(ls):
                # Read an RSS feed
                v = rssutil.feedValues(rssutil.readRSSFeed(ls))
                print >> stderr, "Client result", v
                return v

            if contains(ct, "text/javascript") or contains(ct, "application/json") or jsonutil.isJSON(ls):
                # Read a JSON document
                v = elementsToValues(jsonutil.readJSON(ls))
                print >> stderr, "Client result", v
                return v

            if contains(ct, "text/xml") or contains(ct, "application/xml") or xmlutil.isXML(ls):
                # Read an XML document
                v = elementsToValues(xmlutil.readXML(ls))
                print >> stderr, "Client result", v
                return v

            # Return the content type and a content list
            v = (ct, ls)
            print >> stderr, "Client result", v
            return v

        # handle a POST request
        if func == "post":
            u = requesturi(self.url, car(args))
            print >> stderr, "Client POST request", u
            req = StringIO()
            writeStrings(atomutil.writeATOMEntry(atomutil.entryValuesToElements(cadr(args))), req)
            headers["Content-type"] = "application/atom+xml"
            c.request("POST", u, req.getvalue(), headers)
            res = c.getresponse()
            print >> stderr, "Client status", res.status
            if res.status != 200 and res.status != 201:
                return None
            loc = res.getheader("Location")
            if loc == None:
                return None
            return loc[(loc.rfind('/') + 1):]

        # handle a PUT request
        if func == "put":
            u = requesturi(self.url, car(args))
            print >> stderr, "Client PUT request", u
            req = StringIO()
            writeStrings(atomutil.writeATOMEntry(atomutil.entryValuesToElements(cadr(args))), req)
            headers["Content-type"] = "application/atom+xml"
            c.request("PUT", u, req.getvalue(), headers)
            res = c.getresponse()
            print >> stderr, "Client status", res.status
            if res.status != 200:
                return None
            return True

        # handle a PATCH request
        if func == "patch":
            u = requesturi(self.url, car(args))
            print >> stderr, "Client PATCH request", u
            req = StringIO()
            writeStrings(atomutil.writeATOMEntry(atomutil.entryValuesToElements(cadr(args))), req)
            headers["Content-type"] = "application/atom+xml"
            c.request("PATCH", u, req.getvalue(), headers)
            res = c.getresponse()
            print >> stderr, "Client status", res.status
            if res.status != 200:
                return None
            return True

        # handle a DELETE request
        if func == "delete":
            u = requesturi(self.url, car(args))
            print >> stderr, "Client DELETE request", u
            c.request("DELETE", u, None, headers)
            res = c.getresponse()
            print >> stderr, "Client status", res.status
            if res.status != 200:
                return None
            return True

        # handle a JSON-RPC request
        u = requesturi(self.url, ())
        print >> stderr, "Client JSON-RPC request", u
        global id
        req = StringIO()
        writeStrings(jsonutil.jsonRequest(id, func, args), req)
        id = id + 1
        headers["Content-type"] = "application/json-rpc"
        c.request("POST", u, req.getvalue(), headers)
        res = c.getresponse()
        print >> stderr, "Client status", res.status
        if res.status != 200:
            return None
        v = jsonutil.jsonResultValue((res.read(),))
        print >> stderr, "Client result", v
        return v