From d98d4800dee590fa4cb58cf5544cf2a45a7e5f85 Mon Sep 17 00:00:00 2001 From: Akshita-2307 Date: Fri, 29 May 2026 23:16:04 +0530 Subject: [PATCH] Add enum validation, case-insensitive matching, and skill threshold (fixes #673, #552, #473) --- utils/recommender.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/utils/recommender.py b/utils/recommender.py index 8a53c64b..7fc31be7 100644 --- a/utils/recommender.py +++ b/utils/recommender.py @@ -131,23 +131,29 @@ def get_recommendations(skills_string, level, interest, time_availability): return [item["project"] for item in scored_projects[:MAX_RESULTS]] +VALID_LEVELS = ["beginner", "intermediate", "advanced"] +VALID_TIME_AVAILABILITY = ["low", "medium", "high"] + + def validate_recommendation_inputs(skills, level, interest, time_availability): - """ - Validate all four required fields. - Returns a list of error strings. An empty list means all inputs are valid. - """ errors = [] if not skills or not skills.strip(): errors.append("Please enter at least one skill.") + elif not parse_skills(skills): + errors.append("Please enter at least one valid skill.") if not level or not level.strip(): errors.append("Please select an experience level.") + elif level.strip().lower() not in VALID_LEVELS: + errors.append("Invalid experience level. Choose Beginner, Intermediate, or Advanced.") if not interest or not interest.strip(): errors.append("Please select an area of interest.") if not time_availability or not time_availability.strip(): errors.append("Please select your time availability.") + elif time_availability.strip().lower() not in VALID_TIME_AVAILABILITY: + errors.append("Invalid time availability. Choose Low, Medium, or High.") return errors