-
Notifications
You must be signed in to change notification settings - Fork 332
Expand file tree
/
Copy pathcontext.py
More file actions
55 lines (45 loc) 路 1.65 KB
/
Copy pathcontext.py
File metadata and controls
55 lines (45 loc) 路 1.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/usr/bin/env python3
from . import api
from .conversions import obj_qid, obj_id
from .response import Response
import requests
class Context:
def __init__(self, domain, service_map, version):
self.domain = domain
self.service_map = service_map
self.version = version
def mkurl(self, service, path, *, internal=False, protocol="http"):
port = self.service_map[service]
if not path or path[0] != "/":
path = "/" + path
if self.version is not None and not internal:
vpath = f"/v{self.version}"
else:
vpath = ""
return f"{protocol}://localhost:{port}{vpath}{path}"
@staticmethod
def headers(user, conn_id="0"):
return {"Z-User": obj_id(user), "Z-Connection": conn_id}
def request(self, method, url, user=None, conn_id="0", headers=None, **kwargs):
if headers is None:
headers = {}
if user is not None:
headers = {**headers, **self.headers(user, conn_id)}
return Response(
method,
url,
kwargs,
requests.request(method, url, headers=headers, **kwargs),
)
def __getattr__(self, name):
def method(*args, **kwargs):
return getattr(api, name)(self, *args, **kwargs)
return method
def versioned(self, v):
return type(self)(self.domain, self.service_map, v)
def check_status(self, service):
url = self.mkurl(service, "/i/status", internal=True)
try:
return self.request("HEAD", url).status_code == 200
except requests.exceptions.ConnectionError:
return False