🐍
JupyterHub API を使ってみよう
JupyterHub API を使ってみよう
続き
この記事でやること
JupyterHub APIを使ってJupyterHubを操作します。
ユーザ作成・削除、サーバのスタート・ストップ、トークンの取得および削除
JupyterHub API
JupyterHub API とは
JupyterHub が提供するWeb APIの一種
公式ドキュメントには Play Ground があります。
事前準備
エンドポイントURL
http://EC2のPublicIP/http/hub/api
API を実行
token を 取得する
エンドポイントのURLを使って、認証が必要なAPIを実行するにはトークンを取得する必要があります。
まずはログインします。
File
から Hub Control Panel
Token を クリックします。
Note
に トークンに説明を入力して Request new API token
をクリックします。
Your new API Token
を コピーします。
ユーザーを作成する
import requests
def create_user_api(base_url,api_user_name):
r = requests.post(base_url + '/users/' + api_user_name,
headers={
'Authorization': 'token %s' % token,
}
)
r.raise_for_status()
res = r.json()
print(res)
if __name__ == '__main__':
url = '{0}/http/hub/api'.format(public_ip)
try:
create_user_api(url,'nonadmin')
except Exception as e:
print(e)
ユーザの一覧を表示する
import requests
public_ip = 'http://EC2 の Public IP'
token = ''
# ユーザの一覧を表示
def user_list(base_url):
r = requests.get(base_url + '/users',
headers={
'Authorization': 'token %s' % token,
}
)
r.raise_for_status()
res = r.json()
print(res)
if __name__ == '__main__':
url = '{0}/http/hub/api'.format(public_ip)
user_list(url)
サーバをスタートする
import requests
public_ip = 'http://EC2 の Public IP'
token = ''
def start_server_api(base_url,user_name):
r = requests.post(base_url + '/users/{0}/server'.format(user_name),
headers={
'Authorization': 'token %s' % token,
}
)
r.raise_for_status()
res = r.json()
print(res)
if __name__ == '__main__':
url = '{0}/http/hub/api'.format(public_ip)
try:
start_server_api(url,'nonadmin')
except Exception as e:
print(e)
サーバをストップする
import requests
public_ip = 'http://EC2 の Public IP'
token = ''
def stop_server_api(base_url,user_name):
r = requests.delete(base_url + '/users/{0}/server'.format(user_name),
headers={
'Authorization': 'token %s' % token,
}
)
r.raise_for_status()
res = r.json()
print(res)
if __name__ == '__main__':
url = '{0}/http/hub/api'.format(public_ip)
try:
stop_server_api(url,'nonadmin')
except Exception as e:
print(e)
ユーザーを削除する
import requests
public_ip = 'http://EC2 の Public IP'
token = ''
def delete_user_api(base_url,api_user_name):
r = requests.delete(base_url + '/users/' + api_user_name,
headers={
'Authorization': 'token %s' % token,
}
)
r.raise_for_status()
res = r.json()
print(res)
if __name__ == '__main__':
url = '{0}/http/hub/api'.format(public_ip)
try:
delete_user_api(url,'nonadmin')
except Exception as e:
print(e)
トークンを作成する
import requests
protocol_name = 'http'
public_ip = 'EC2 の Public IP'
public_url = '{0}://{1}'.format(protocol_name,public_ip)
token = ''
def get_token_user_api(base_url,user_name):
r = requests.post(base_url + '/users/{0}/tokens'.format(user_name),
headers={
'Authorization': 'token %s' % token,
},
json={
"user_name":user_name,
"password":"passowrd"
}
)
r.raise_for_status()
res = r.json()
print(res)
if __name__ == '__main__':
url = '{0}/http/hub/api'.format(public_url)
try:
get_token_user_api(url,'jupyter')
except Exception as e:
print(e)
トークンを削除する
import requests
protocol_name = 'http'
public_ip = 'EC2 の Public IP'
public_url = '{0}://{1}'.format(protocol_name,public_ip)
token = ''
def delete_token_user_api(base_url,user_name,token_id):
r = requests.delete(base_url + '/users/{0}/tokens/{1}'.format(user_name,token_id),
headers={
'Authorization': 'token %s' % token,
}
)
r.raise_for_status()
res = r.json()
print(res)
if __name__ == '__main__':
url = '{0}/http/hub/api'.format(public_url)
try:
delete_token_user_api(url,'jupyter','a39')
except Exception as e:
print(e)
Discussion