Source code for derobertis_cv.models.skill_experience

import datetime
from dataclasses import dataclass, replace
from typing import TYPE_CHECKING, Optional, Type, Union

import pandas as pd

from derobertis_cv.models.experience_scale import (
    HoursExperienceScale,
    SkillExperienceScale,
)
from derobertis_cv.models.i_skill_experience import ISkillExperience
from derobertis_cv.models.skill_experience_mixin import SkillExperienceMixin

if TYPE_CHECKING:
    from derobertis_cv.models.skill_experiences import SkillExperiences


[docs] @dataclass(unsafe_hash=True) class SkillExperience(SkillExperienceMixin, ISkillExperience): begin_date_inp: Union[str, datetime.date] hours_per_week: float = 0 one_time_hours: float = 0 end_date_inp: Optional[Union[str, datetime.date]] = None experience_scale: Type[SkillExperienceScale] = HoursExperienceScale def __post_init__(self): self.begin_date = _date_str_to_date(self.begin_date_inp) if self.end_date_inp is not None: self.end_date = _date_str_to_date(self.end_date_inp) self.effective_end_date = self.end_date else: self.end_date = None self.effective_end_date = datetime.date.today() @property def hours(self) -> float: # type: ignore num_hours = self.one_time_hours num_hours += self.weeks_elapsed * self.hours_per_week return num_hours
[docs] def chain(self, other: "SkillExperience") -> "SkillExperiences": from derobertis_cv.models.skill_experiences import SkillExperiences # Create a new version of self with the end date set to the other's begin date self_with_end_date = replace(self, end_date_inp=other.begin_date_inp) return SkillExperiences( experiences=[self_with_end_date, other], experience_scale=self.experience_scale, )
def _date_str_to_date(date_str: str) -> datetime.date: dt: datetime.datetime = pd.to_datetime(date_str).to_pydatetime() return dt.date()