/
megaokna43
/
courses_4
Обзор
Документация
Войти
/
megaokna43
/
courses_4
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/vacancy.py
117 строк
5 KB
megaokna43
проверил работу кода и тестов
14 дек 2024, 21:51
14 дек 2024, 21:51
dda6769
Код
Авторство
О чём код?
from src.salary import Salary class Vacancy: """Класс Vacancy, который представляет собой выбранную информацию о вакансии""" def __init__(self, name, city, salary_from, salary_to, url, description): """Конструктор класса, который принимает следующие атрибуты класса Vacancy.""" self.__name = self.__validate_name(name) self.__city = self.__validate_city(city) self.__salary = Salary(salary_from, salary_to) # Используем класс Salary self.__url = self.__validate_url(url) self.__description = self.__validate_description(description) @staticmethod def __validate_name(name): """Метод валидации названия вакансии""" if not isinstance(name, str) or not name.strip(): raise ValueError("Название вакансии должно быть непустой строкой") return name.strip() @staticmethod def __validate_city(city): """Метод валидации города""" if not isinstance(city, str) or not city.strip(): raise ValueError("Город должен быть непустой строкой") return city.strip() @property def salary(self): """Возвращает объект Salary, содержащий информацию о зарплате""" return self.__salary @property def salary_from(self): """Возвращает нижнюю границу зарплаты""" return self.__salary.salary_from @property def salary_to(self): """Возвращает верхнюю границу зарплаты""" return self.__salary.salary_to @staticmethod def __validate_url(url): """Метод валидации URL""" if not isinstance(url, str) or not url.strip(): raise ValueError("URL должен быть непустой строкой") return url.strip() @staticmethod def __validate_description(description): """Метод валидации описания""" if not isinstance(description, str): description = "" return description.strip() # Геттеры с использованием property @property def name(self): return self.__name @property def city(self): return self.__city @property def url(self): return self.__url @property def description(self): return self.__description def __str__(self): """Метод, который возвращает строковое представление вакансии, включающее все ее атрибуты.""" result = (f"Название: {self.__name}\n" f"Город: {self.__city}\n" f"Зарплата: от {self.salary_from} до {self.salary_to}\n" f"Описание: {self.__description}\n" f"Ссылка: {self.__url}\n") return result def to_dict(self): """ Метод, который возвращает словарь, содержащий все атрибуты вакансии.""" result = { "name": self.__name, "city": self.__city, "salary_from": self.salary_from, "salary_to": self.salary_to, "url": self.__url, "description": self.__description } return result @classmethod def cast_to_object_list(cls, vacancies_data): """ Это класс-метод, который принимает список словарей, представляющих вакансии, и возвращает список экземпляров класса Vacancy, созданных на основе этих данных. Он обрабатывает различные форматы данных о зарплате и описании, чтобы создать корректные экземпляры Vacancy.""" vacancies_instances = [] for vacancy in vacancies_data: name = vacancy.get('name') city = vacancy.get('area', {}).get('name') salary_info = vacancy.get('salary', {}) if salary_info: salary_from = salary_info["from"] if salary_info.get('from') else 0 salary_to = salary_info["to"] if salary_info.get('to') else 0 else: salary_from = 0 salary_to = 0 url = vacancy.get('alternate_url') description = vacancy.get('snippet', {}).get('responsibility', '') if description is None: description = "" instance = cls(name, city, salary_from, salary_to, url, description) vacancies_instances.append(instance) return vacancies_instances