summaryrefslogtreecommitdiff
path: root/yarns/lib.py
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2017-08-06 11:46:02 +0300
committerLars Wirzenius <liw@liw.fi>2017-08-06 18:56:34 +0300
commit6299228754893813341085d99c3924f7fefe1c18 (patch)
tree432e9f076b3b226487b8a77359545adba50e1714 /yarns/lib.py
parent888db73b93aefe70d838d499f7f9cc43eee7372b (diff)
downloadick2-6299228754893813341085d99c3924f7fefe1c18.tar.gz
Add: ControllerAPI, ControllerState
Diffstat (limited to 'yarns/lib.py')
-rw-r--r--yarns/lib.py94
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