-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path__init__.py
More file actions
141 lines (123 loc) · 4.24 KB
/
__init__.py
File metadata and controls
141 lines (123 loc) · 4.24 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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
import requests
class Server:
def __init__(self, goporting, host, port, digest=None):
self.goporting = goporting
self.host = host
self.port = port
self.digest = digest
self.debug = goporting.debug
def create(self):
assert self.digest == None
url = "{}/api/server".format(self.goporting.url)
if self.debug: print(url)
data = {
"host": self.host,
"port": self.port,
}
if self.debug: print(data)
response = requests.post(url, data=data).json()
if self.debug: print(response)
assert response["status"]
server = response["msg"]
self.digest = server["hash"]
def delete(self):
assert self.digest != None
url = "{}/api/server/{}".format(self.goporting.url, self.digest)
if self.debug: print(url)
response = requests.delete(url).json()
if self.debug: print(response)
assert response['status']
return response['status']
def get_clients(self):
url = "{}/api/server/{}/client".format(self.goporting.url, self.digest)
if self.debug: print(url)
response = requests.get(url).json()
if self.debug: print(response)
assert response['status']
result = []
for digest, client in response['msg'].items():
result.append(Client(
self,
digest,
client['host'],
client['port'],
client['python2'],
client['python3'],
))
return result
def __str__(self):
return "[{}] {}:{}".format(self.digest, self.host, self.port)
def __repr__(self):
return str(self)
class Client:
def __init__(self, server, digest, host, port, python2, python3):
self.server = server
self.digest = digest
self.host = host
self.port = port
self.python2 = python2
self.python3 = python3
self.debug = server.debug
def delete(self):
url = "{}/api/client/{}".format(self.server.goporting.url, self.digest)
if self.debug: print(url)
response = requests.delete(url).json()
if self.debug: print(response)
assert response['status']
return response['status']
def system(self, cmd):
url = "{}/api/client/{}".format(self.server.goporting.url, self.digest)
if self.debug: print(url)
response = requests.post(url, data={"cmd": cmd}).json()
if self.debug: print(response)
assert response['status']
return response["msg"]
def __str__(self):
return "[{}] {}:{}\nPython2: {}\nPython3: {}".format(
self.digest,
self.host,
self.port,
self.python2,
self.python3,
)
def __repr__(self):
return str(self)
class Goporting:
def __init__(self, host, port, debug=False):
self.host = host
self.port = port
self.url = "http://{}:{}".format(self.host, self.port)
self.debug = debug
def create_server(self, host, port):
server = Server(self, host, port)
server.create()
return server
def get_server(self, digest):
url = "{}/api/server/{}".format(self.url, digest)
if self.debug: print(url)
response = requests.get(url).json()
if self.debug: print(response)
assert response['status']
server = Server(self, response['msg']['host'], response['msg']['port'], digest)
return server
def get_servers(self):
url = "{}/api/server".format(self.url)
if self.debug: print(url)
response = requests.get(url).json()
if self.debug: print(response)
assert response['status']
result = []
for digest, server in response['msg']['servers'].items():
result.append(Server(
self,
server['host'],
server['port'],
digest,
))
return result
def delete_server(self, digest):
return self.get_server(digest).delete()
def __str__(self):
return "Goporting RESTful API EndPoint: {}".format(self.url)
def __repr__(self):
return str(self)