Source code for derobertis_cv.models.skill_experience_mixin
import datetime
from typing import Type
from derobertis_cv.models.experience_scale import SkillExperienceScale
[docs]
class SkillExperienceMixin:
experience_scale: Type[SkillExperienceScale]
hours: float
effective_end_date: datetime.date
begin_date: datetime.date
@property
def experience_length_str(self) -> str:
months = self.months_elapsed
if months < 1.5:
return "1 month"
if months < 10:
return f"{months:.0f} months"
years = months / 12
if round(years, 0) == 1:
return f"{years:.0f} year"
return f"{years:.0f} years"
@property
def weeks_elapsed(self) -> float:
seconds_elapsed = self.experience_length.total_seconds()
return seconds_elapsed / (60 * 60 * 24 * 7)
@property
def months_elapsed(self) -> float:
seconds_elapsed = self.experience_length.total_seconds()
return seconds_elapsed / (60 * 60 * 24 * 30)
@property
def experience_level(self) -> int:
return self.experience_scale.experience_to_level(self)
@property
def experience_length(self) -> datetime.timedelta:
return self.effective_end_date - self.begin_date