Emma Scharfmann
fix submit page
5c536a0
Raw
History Blame
2.45 kB
import json
import logging
import re
import pandas as pd
from about import REGISTRATION_REPO
from components.registration.config import PARTICIPANTS_FILE_NAME, PARTICIPANT_COLUMNS
from components.utils import load_data_from_dataset
logger = logging.getLogger(__name__)
def validate_email_domain(email: str) -> bool:
"""Return True if email belongs to an academic or registered company domain."""
academic_tlds = [".edu", ".ac.uk", ".ac.", "university", "univ.", "institute", ".gov"]
return any(token in email.lower() for token in academic_tlds)
def get_team_membership_entry(team_name: str, is_leader: bool) -> dict[str, str | bool]:
"""Return a dictionary with information about a team."""
return {"team_name": team_name, "is_leader": is_leader}
def validate_email_format(email: str) -> bool:
"""
Validate the email format.
:param email: The email address to validate.
:return: True if the email is valid, False otherwise.
"""
return bool(re.match(r"^[^@\s]+@[^@\s]+\.[^@\s]+$", email))
def is_institutional_email(email: str) -> bool:
"""Check if an email address is an institutional email."""
patterns = [".edu", ".ac.", ".gov", "university", "univ.", "institute", "research"]
return any(p in email.lower() for p in patterns)
def _participant_team_names(participant_row: pd.Series) -> list[str]:
"""Return list of team_name the participant already belongs to."""
memberships = json.loads(participant_row.get("team_memberships") or "[]")
return [m["team_name"] for m in memberships]
def get_user_teams(email: str) -> pd.DataFrame:
"""
Return the teams associated with a given email.
:param email: The email address to query.
:return: The teams associated with a given email as a DataFrame.
"""
participants_df = load_data_from_dataset(REGISTRATION_REPO, PARTICIPANTS_FILE_NAME, PARTICIPANT_COLUMNS)
existing_participant = participants_df[participants_df["email"] == email]
if existing_participant.empty:
return pd.DataFrame(columns=["team_name", "role"])
existing_teams = json.loads(
existing_participant.iloc[0].get("team_memberships") or "[]"
)
if not existing_teams:
return pd.DataFrame(columns=["team_name", "role"])
df = pd.DataFrame(existing_teams)
df["role"] = df["is_leader"].apply(lambda x: "Leader" if x else "Member")
return df[["team_name", "role"]]