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