Source code for pykubegrader.submit.final_submission
import os
import requests
from requests.auth import HTTPBasicAuth
from ..submit.submit_assignment import get_credentials
[docs]
def final_submission(
    assignment: str, assignment_type: str, token: str, week_number=None
) -> None:
    """
    Mark a student as complete for an assignment
    """
    base_url = os.getenv("DB_URL")
    if not base_url:
        raise ValueError("Environment variable 'DB_URL' not set")
    url = base_url.rstrip("/") + "/completed-assignments"
    username, password = get_credentials().values()
    params = final_submission_payload(
        assignment=assignment,
        assignment_type=assignment_type,
        token=token,
        week_number=week_number,
    )
    env_token = os.getenv("TOKEN")
    if env_token:
        params["key_used"] = token
    try:
        res = requests.post(
            url=url, auth=HTTPBasicAuth(username, password), json=params
        )
        res.raise_for_status()
        return res.json()
    except requests.RequestException as err:
        raise RuntimeError(f"An error occurred while requesting {url}: {err}")
    except Exception as err:
        raise RuntimeError(f"An unexpected error occurred: {err}") 
[docs]
def final_submission_payload(
    assignment: str, assignment_type: str, token: str, week_number=None
) -> dict:
    jhub_user = os.getenv("JUPYTERHUB_USER")
    if jhub_user is None:
        raise ValueError("JupyterHub user not found")
    student_email = jhub_user
    payload = {
        "student_email": student_email,
        "assignment": assignment,
        "week_number": week_number,
        "assignment_type": assignment_type,
        "student_seed": 0,  # Not Implemented
        "key_used": token,
    }
    return payload 
[docs]
def delete_completed_assignment(assignment: str, 
                                assignment_type: str, 
                                token: str, week_number: int, 
                                admin_user: str, 
                                admin_pw: str) -> None:
    base_url = os.getenv("DB_URL")
    if not base_url:
        raise ValueError("Environment variable 'DB_URL' not set")
    url = base_url.rstrip("/") + "/completed-assignments"
    params = final_submission_payload(
        assignment=assignment,
        assignment_type=assignment_type,
        token=token,
        week_number=week_number,
    )
    
    env_token = os.getenv("TOKEN")
    if env_token:
        params["key_used"] = token
    try:
        res = requests.delete(url, params=params, auth=HTTPBasicAuth(admin_user, admin_pw))
        res.raise_for_status()
        return res.json()
    except requests.RequestException as err:
        raise RuntimeError(f"An error occurred while requesting {url}: {err}")
    except Exception as err:
        raise RuntimeError(f"An unexpected error occurred: {err}")