from typing import List, Dict, Union
from dataclasses import dataclass
@dataclass
class Skill:
"""Represents a technical skill with proficiency level and experience"""
name: str
level: int
years_of_experience: int
def get_proficiency(self) -> str:
proficiency_map = {
1: "Beginner",
2: "Novice",
3: "Intermediate",
4: "Advanced",
5: "Expert"
}
return proficiency_map.get(self.level, "Unknown")
@dataclass
class SkillCategory:
"""Groups related skills by category"""
category: str
skills: List[Skill]
skill_set: List[SkillCategory] = [
SkillCategory(
category="Frontend Development",
skills=[
Skill("HTML", 5, 6),
Skill("CSS", 5, 6),
Skill("JavaScript", 5, 5),
Skill("Bootstrap", 4, 4),
]
),
SkillCategory(
category="Backend Development",
skills=[
Skill("Python", 5, 4),
Skill("Django", 5, 3),
Skill("Flask", 4, 3),
Skill("Django REST API", 5, 3),
]
),
SkillCategory(
category="Database Management",
skills=[
Skill("PostgreSQL", 4, 3),
Skill("SQLite", 4, 4),
]
),
SkillCategory(
category="DevOps & Tools",
skills=[
Skill("Docker", 4, 2),
Skill("Apache Airflow", 3, 2),
]
)
]
def get_skills_by_category(category: str) -> List[Skill]:
"""Get all skills for a specific category"""
for skill_category in skill_set:
if skill_category.category == category:
return skill_category.skills
return []
def get_top_skills(limit: int = 5) -> List[Skill]:
"""Get top skills sorted by level and experience"""
all_skills = []
for category in skill_set:
all_skills.extend(category.skills)
return sorted(all_skills,
key=lambda x: (x.level, x.years_of_experience),
reverse=True)[:limit]