"""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