109 lines
2.8 KiB
Python
Executable File
109 lines
2.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import sys
|
|
import zipfile
|
|
import subprocess
|
|
import getpass
|
|
|
|
AIS_DIR = "ais"
|
|
API_URL = "https://pytron.tforgione.fr/upload-target/"
|
|
|
|
class Ai:
|
|
def __init__(self, path):
|
|
self.path = path
|
|
self.name = path.split('/')[-1]
|
|
|
|
def print_green(param):
|
|
print("\033[32;1m" + str(param) + "\033[0m", file=sys.stderr)
|
|
|
|
def print_red(param):
|
|
print("\033[31;1m" + str(param) + "\033[0m", file=sys.stderr)
|
|
|
|
def print_yellow(param):
|
|
print("\033[33;1m" + str(param) + "\033[0m", file=sys.stderr)
|
|
|
|
def find_ais(path):
|
|
return [Ai(x) for x in os.listdir(path) if not x.startswith('__') and not x.startswith('.')]
|
|
|
|
def upload_ai(ai):
|
|
return_code = 0
|
|
print_yellow("Please enter the password corresponding to " + ai.name);
|
|
password = getpass.getpass()
|
|
|
|
print_yellow("Zipping the AI...")
|
|
zip = zipfile.ZipFile('.archive.zip', mode = 'w')
|
|
try:
|
|
for file in os.listdir(AIS_DIR + "/" + ai.path):
|
|
zip.write(AIS_DIR + "/" + ai.path + "/" + file, arcname=file)
|
|
finally:
|
|
zip.close()
|
|
|
|
print_yellow("Uploading the AI...")
|
|
|
|
curl = subprocess.Popen([
|
|
'curl', '-X', 'POST',
|
|
'-F', 'archive=@.archive.zip',
|
|
'-F', 'name=' + ai.name,
|
|
'-F', 'password=' + password,
|
|
API_URL],
|
|
stderr = subprocess.PIPE,
|
|
stdout = subprocess.PIPE)
|
|
|
|
code = curl.wait()
|
|
|
|
if code != 0:
|
|
return_code = 1
|
|
response = "curl request failed"
|
|
else:
|
|
response = curl.stdout.read().decode()
|
|
|
|
if response == 'Success':
|
|
print_green("Upload finished!")
|
|
else:
|
|
print_red("Upload failed: " + str(response).lower())
|
|
return_code = 1
|
|
|
|
os.remove(".archive.zip")
|
|
sys.exit(return_code)
|
|
|
|
def main():
|
|
print_green("Welcome to the pytron uploader!")
|
|
ais = find_ais(AIS_DIR)
|
|
|
|
if len(ais) == 0:
|
|
print_red("No AI have been found. Please put your AIs as directories inside the ais directory")
|
|
sys.exit(1)
|
|
|
|
elif len(ais) == 1:
|
|
print_yellow("Only one AI has been found: " + ais[0].name)
|
|
print_yellow("Would you like to upload it ? [Y/n]")
|
|
|
|
response = input().lower()
|
|
if response == '' or response == 'y' or response == 'yes':
|
|
upload_ai(ais[0])
|
|
|
|
else:
|
|
print_yellow("Many AIs have been found, which one would you like to upload ?")
|
|
|
|
for (id, ai) in enumerate(ais):
|
|
print("\033[34;1m[" + str(id + 1) + "]\033[0m \033[33m" + ai.name + "\033[0m", file=sys.stderr)
|
|
|
|
response = input()
|
|
|
|
try:
|
|
response = int(response) - 1
|
|
if response < 0 or response >= len(ais):
|
|
raise ValueError
|
|
except ValueError:
|
|
print_red('I was expecting an integer in [1,' + str(len(ais)) + ']')
|
|
sys.exit(1)
|
|
|
|
upload_ai(ais[response])
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|
|
|