%%writefile ci/service-token.yaml
hub:
services:
testing:
admin: true
apiToken: 19e8ed9d96f94d0d8fae16c6af02ee11
Overwriting ci/service-token.yaml
from ruamel.yaml import YAML
yaml = YAML(typ='safe')
yaml_file = 'ci/service-token.yaml'
with open(yaml_file) as f:
config = yaml.load(f)
token = config['hub']['services']['testing']['apiToken']
token
'19e8ed9d96f94d0d8fae16c6af02ee11'
Create the user
import requests
hub_url = 'http://127.0.0.1:8765'
# create user
headers = {'Authorization': f"token {token}"}
username = 'testuser'
r = requests.post(hub_url + f'/hub/api/users/{username}', headers=headers)
r.raise_for_status()
r.json()
{'kind': 'user', 'name': 'testuser', 'admin': False, 'groups': [], 'server': None, 'pending': None, 'created': '2018-08-10T11:06:55.929426Z', 'last_activity': None, 'servers': None}
Start the server
r = requests.post(hub_url + f'/hub/api/users/{username}/server', headers=headers)
r.raise_for_status()
r.status_code
202
Wait for the server to start and then access it
import time
while True:
r = requests.get(hub_url + f'/hub/api/users/{username}', headers=headers)
r.raise_for_status()
user_model = r.json()
user_model
# will be pending while starting,
# server will be set when ready
if '' not in user_model['servers']:
# spawn failed!
raise RuntimeError("Server never started!")
print(user_model)
server_model = user_model['servers']['']
if server_model['ready']:
break
print(f"pending {server_model['pending']}")
time.sleep(1)
print(f"Server running at {server_model['url']}")
pending spawn pending spawn Server running at /user/testuser/
Access server
r = requests.get(hub_url + server_model['url'] + "api")
r.raise_for_status()
r.json()
{'version': '5.7.0.dev0'}
Stop the server
r = requests.delete(hub_url + f'/hub/api/users/{username}/server', headers=headers)
r.raise_for_status()