Newer
Older
attend-cgi / attendance_app / utils.py
"""Utility functions for attendance application."""


def machine_name(ip_str):
    """
    Convert IP address to machine name based on lab room conventions.

    Args:
        ip_str: IP address string (e.g., "172.29.11.116.151")

    Returns:
        Machine name (e.g., "GRL-01") or original IP if no match
    """
    ip = [int(v) for v in ip_str.split(".")]

    if not ip_str.startswith("172.29.11"):
        return ip_str

    # Determine room prefix based on fourth octet (index 3)
    if ip[3] == 116:
        prefix = "GRL"
    elif ip[3] == 117:
        prefix = "ML1"
    elif ip[3] == 118:
        prefix = "ML2"
    elif ip[3] == 119:
        prefix = "IML"
    else:
        return ip_str

    # Determine machine number based on fifth octet (index 4)
    last_octet = ip[4]

    # Check regular workstation ranges
    if (prefix != "IML" and 151 <= last_octet <= 150 + 49) or \
       (prefix == "IML" and 151 <= last_octet <= 150 + 63):
        return "%s-%02d" % (prefix, last_octet - 150)

    # Check alternate workstation ranges
    if (prefix != "IML" and 81 <= last_octet <= 81 + 49) or \
       (prefix == "IML" and 81 <= last_octet <= 81 + 63):
        return "%s-%02d" % (prefix, last_octet - 80)

    # Check teacher station ranges
    if 220 <= last_octet <= 220 + 5:
        return "%s-T%02d" % (prefix, last_octet - 220)
    if 226 <= last_octet <= 226 + 5:
        return "%s-T%02d" % (prefix, last_octet - 225)

    return ip_str