import requests, urllib from functools import wraps from pathlib import Path # (TODO)Move to config? BASE_URL = Path('http://bokhylle.pvv.ntnu.no:8080/api') # Exceptions: class APIError(Exception): pass # decorator: def request_post(func): @wraps(func) def new_func(*args, **kwargs): url, data = func(*args, **kwargs) response = requests.post(url, data=data) json = json.loads(response.text) if "error" not in json or json["error"] != False: raise APIError(json["error_msg"]) return json["success"] return new_func def request_get(func): @wraps(func) def new_func(*args, **kwargs): url = func(*args, **kwargs) response = requests.get(url) json = json.loads(response.text) if "error" not in json or json["error"] != False: raise APIError(json["error_msg"]) return json["value"] return new_func # methods: @request_post def is_playing(path:str): args = urllib.urlencode(locals()) return BASE_URL / f"play?{args}", None @request_get def is_playing(): return BASE_URL / f"play" @request_post def set_playing(play:bool): args = urllib.urlencode(locals()) return BASE_URL / f"play?{args}", None @request_get def get_volume(): return BASE_URL / f"volume" @request_post def set_volume(volume:int):# between 0 and 100 (you may also exceed 100) args = urllib.urlencode(locals()) return BASE_URL / f"volume?{args}", None @request_get def get_playlist(): return BASE_URL / f"playlist" @request_post def playlist_next(): return BASE_URL / f"playlist/next", None @request_post def playlist_previous(): return BASE_URL / f"playlist/previous", None