diff options
author | Lars Wirzenius <liw@liw.fi> | 2017-08-06 11:46:02 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2017-08-06 18:56:34 +0300 |
commit | 6299228754893813341085d99c3924f7fefe1c18 (patch) | |
tree | 432e9f076b3b226487b8a77359545adba50e1714 /yarns/lib.py | |
parent | 888db73b93aefe70d838d499f7f9cc43eee7372b (diff) | |
download | ick2-6299228754893813341085d99c3924f7fefe1c18.tar.gz |
Add: ControllerAPI, ControllerState
Diffstat (limited to 'yarns/lib.py')
-rw-r--r-- | yarns/lib.py | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/yarns/lib.py b/yarns/lib.py new file mode 100644 index 0000000..4d305c7 --- /dev/null +++ b/yarns/lib.py @@ -0,0 +1,94 @@ +import errno +import json +import os +import random +import socket +import sys +import time + +import cliapp +import requests + +from yarnutils import * + + +srcdir = os.environ['SRCDIR'] +datadir = os.environ['DATADIR'] +vars = Variables(datadir) + + +def random_free_port(): + MAX = 1000 + for i in range(MAX): + port = random.randint(1025, 2**15-1) + s = socket.socket() + try: + s.bind(('0.0.0.0', port)) + except OSError as e: + if e.errno == errno.EADDRINUSE: + continue + print('cannot find a random free port') + raise + s.close() + break + print('picked port', port) + return port + + +def wait_for_port(port): + MAX = 5 + t = time.time() + while time.time() < t + MAX: + try: + s = socket.socket() + s.connect(('127.0.0.1', port)) + except OSError as e: + raise + else: + return + +def write(filename, data): + with open(filename, 'w') as f: + f.write(data) + + +def cat(filename): + MAX_CAT_WAIT = 5 # in seconds + t = time.time() + while time.time() < t + MAX_CAT_WAIT: + if os.path.exists(filename): + return open(filename, 'r').read() + + +def get(url, token): + headers = { + 'Authorization': 'Bearer {}'.format(token), + } + r = requests.get(url, headers=headers) + return r.status_code, r.headers['Content-Type'], r.text + + +def post(url, body_text, token): + headers = { + 'Authorization': 'Bearer {}'.format(token), + 'Content-Type': 'application/json', + } + r = requests.post(url, headers=headers, data=body_text) + return r.status_code, r.headers['Content-Type'], r.text + + +def put(url, body_text, token): + headers = { + 'Authorization': 'Bearer {}'.format(token), + 'Content-Type': 'application/json', + } + r = requests.put(url, headers=headers, data=body_text) + return r.status_code, r.headers['Content-Type'], r.text + + +def delete(url, token): + headers = { + 'Authorization': 'Bearer {}'.format(token), + } + r = requests.delete(url, headers=headers) + return r.status_code, r.headers['Content-Type'], r.text |