Source code for pykubegrader.tokens.tokens
import os
import requests
from requests.auth import HTTPBasicAuth
from ..utils import api_base_url
[docs]
def build_token_payload(token: str, duration: int, **kwargs) -> dict:
    student_id = kwargs.get("student_id", None)
    assignment = kwargs.get("assignment", None)
    jhub_user = os.getenv("JUPYTERHUB_USER")
    if jhub_user is None:
        raise ValueError("JupyterHub user not found")
    payload = {
        "value": token,
        "duration": duration,
        "requester": jhub_user,
    }
    if student_id:
        payload["student_id"] = student_id
    if assignment:
        payload["assignment"] = assignment
    return payload 
[docs]
def add_token(token: str, duration: int = 20, **kwargs) -> None:
    """
    Sends a POST request to mint a token
    """
    if not api_base_url:
        raise ValueError("Environment variable for API URL not set")
    url = api_base_url.rstrip("/") + "/tokens"
    payload = build_token_payload(token=token, duration=duration, **kwargs)
    # Dummy credentials for HTTP Basic Auth
    auth = HTTPBasicAuth("user", "password")
    # Add a custom header, for potential use in authorization
    headers = {"x-jhub-user": payload["requester"]}
    response = requests.post(url=url, json=payload, headers=headers, auth=auth)
    # Print response
    print(f"Status code: {response.status_code}")
    try:
        print(f"Response: {response.json()}")
    except ValueError:
        print(f"Response: {response.text}")