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 path_write( thing, steps : List[str], value ): steps_first = steps[:-1] step_last = steps[-1] position = thing for step in steps_first: if (not (step in position)): position[step] = {} position = position[step] position[step_last] = value def merge( core, mantle ): result = core.copy() result.update(mantle) return result 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