0ad/source/tools/rlclient/python/zero_ad/api.py
2025-03-03 14:18:40 +01:00

33 lines
1 KiB
Python

import json
from urllib import request
class RLAPI:
def __init__(self, url):
self.url = url
def post(self, route, data):
response = request.urlopen(url=f"{self.url}/{route}", data=bytes(data, "utf8")) # noqa: S310
return response.read()
def step(self, commands):
post_data = "\n".join(f"{player};{json.dumps(action)}" for (player, action) in commands)
return self.post("step", post_data)
def reset(self, scenario_config, player_id, save_replay):
path = "reset?"
if save_replay:
path += "saveReplay=1&"
if player_id:
path += f"playerID={player_id}&"
return self.post(path, scenario_config)
def get_templates(self, names):
post_data = "\n".join(names)
response = self.post("templates", post_data)
return zip(names, response.decode().split("\n"), strict=False)
def evaluate(self, code):
response = self.post("evaluate", code)
return json.loads(response.decode())