69 lines
1.2 KiB
Python
69 lines
1.2 KiB
Python
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
|
|
|
|
|