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