🐍

JupyterHub API を使ってみよう

2022/06/02に公開

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 を コピーします。

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