def convey(x, fs): y = x for f in fs: y = f(y) return y def string_coin( template : str, arguments : dict ): result = template for (key, value, ) in arguments.items(): result = result.replace("{{%s}}" % key, value) return result def file_read( path : str ): handle = open(path, "r") content = handle.read() handle.close() return content def log( messsage : str ): _sys.stderr.write("-- %s\n" % messsage) def path_read( thing, steps : List[str] ): position = thing for step in steps: if (not (step in position)): raise ValueError("missing key '%s'" % ".".join(steps)) position = position[step] return position def http_call( request : dict, ) -> dict: connection = ( { "http": (lambda: _http_client.HTTPConnection(request["url"]["host"], request["url"]["port"])), "https": (lambda: _http_client.HTTPSConnection(request["url"]["host"], request["url"]["port"])), }[request["url"]["scheme"]] )() connection.request( request["method"], ("/" + request["url"]["path"]), request["data"], request["headers"] ) response_ = connection.getresponse() response = { "status": response_.status, "headers": dict(response_.getheaders()), "data": response_.read(), } return response