Start of the api connection
This commit is contained in:
parent
dd666164a3
commit
d95d0cefbc
2 changed files with 100 additions and 0 deletions
100
api.py
Normal file
100
api.py
Normal file
|
@ -0,0 +1,100 @@
|
|||
import requests
|
||||
import json
|
||||
|
||||
|
||||
class API:
|
||||
def __init__(self, url: str, username: str, password: str, port: int = 5000):
|
||||
self.url = url
|
||||
self.username = username
|
||||
self.password = password
|
||||
self.port = port
|
||||
self.token = None
|
||||
self._auth()
|
||||
|
||||
def _auth(self):
|
||||
try:
|
||||
resp = requests.post(self.url+"/auth", json={"username": self.username, "password": self.password})
|
||||
except (json.JSONDecodeError, KeyError):
|
||||
raise Exception("InvalidLogin")
|
||||
except requests.exceptions.ConnectionError:
|
||||
raise Exception("Connection Error")
|
||||
else:
|
||||
self.token = {"Authorization": f"jwt {resp.json()['access_token']}"}
|
||||
|
||||
def _request(self, args: str, body=None, method: str = "get"):
|
||||
if body is None:
|
||||
body = dict()
|
||||
|
||||
if method == "get":
|
||||
resp = requests.get(self.url+args, headers=self.token, json=body)
|
||||
elif method == "put":
|
||||
resp = requests.put(self.url + args, headers=self.token, json=body)
|
||||
else:
|
||||
raise Exception("Invalid method")
|
||||
|
||||
if resp.status_code == 401:
|
||||
self._auth()
|
||||
self._request(args, body, method)
|
||||
else:
|
||||
return resp
|
||||
|
||||
def code_400(self, text: str):
|
||||
if "not running" in text:
|
||||
msg = "Server is not running"
|
||||
elif "running" in text:
|
||||
msg = "Server is running"
|
||||
elif "respond" in text:
|
||||
msg = "Server did not respond"
|
||||
else:
|
||||
msg = text
|
||||
raise Exception(msg)
|
||||
|
||||
def status(self):
|
||||
resp = self._request("/")
|
||||
if resp.status_code == 400 or "offline" in resp.text:
|
||||
return False
|
||||
else:
|
||||
ps = resp.text.find("has")
|
||||
pe = resp.text.find("players", ps)
|
||||
p = int(resp.text[ps+3:pe])
|
||||
ls = resp.text.find("in", pe)
|
||||
le = resp.text.find("ms", ls)
|
||||
lt = float(resp.text[ls+2:le])
|
||||
pls = resp.text.find("players: ", le)
|
||||
pl = resp.text[pls+9:].split(", ")
|
||||
return p, lt, pl
|
||||
|
||||
def start(self):
|
||||
resp = self._request("/start")
|
||||
if resp.status_code == 400:
|
||||
self.code_400(resp.text)
|
||||
else:
|
||||
return True
|
||||
|
||||
def stop(self):
|
||||
resp = self._request("/stop")
|
||||
if resp.status_code == 400:
|
||||
self.code_400(resp.text)
|
||||
else:
|
||||
return resp.text
|
||||
|
||||
def kill(self):
|
||||
resp = self._request("/kill")
|
||||
if resp.status_code == 400:
|
||||
self.code_400(resp.text)
|
||||
else:
|
||||
return True
|
||||
|
||||
def cmd(self, cmd):
|
||||
resp = self._request("/cmd/"+cmd)
|
||||
if resp.status_code == 400:
|
||||
self.code_400(resp.text)
|
||||
else:
|
||||
return resp.text
|
||||
|
||||
def logs(self):
|
||||
resp = self._request("/logs")
|
||||
if resp.status_code == 400:
|
||||
self.code_400(resp.text)
|
||||
else:
|
||||
return resp.text
|
0
gui.py
Normal file
0
gui.py
Normal file
Loading…
Reference in a new issue