/
megaokna43
/
courses_4
Обзор
Документация
Войти
/
megaokna43
/
courses_4
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/json_worker.py
81 строка
4 KB
megaokna43
проверил работу кода и тестов
14 дек 2024, 21:51
14 дек 2024, 21:51
dda6769
Код
Авторство
О чём код?
from abc import ABC, abstractmethod import json import os class Base_Worker(ABC): """ Base_Worker - это абстрактный базовый класс, который определяет два абстрактных метода """ @abstractmethod def save_vacancy(self, vacancies): # Абстрактный метод записи вакансий pass @abstractmethod def delete_vacancy(self, url): # Абстрактный метод удаления вакансий по url pass @abstractmethod def load_vacancies(self): # Абстрактный метод загрузки вакансий pass class JSON_Worker(Base_Worker): """Класс JSON_Worker использования абстрактных методов""" def __init__(self, file_name="vacancies.json"): """Конструктор класса, который принимает необязательный параметр "file_name". Этот параметр определяет имя файла, в котором будут сохраняться данные о вакансиях.""" if not isinstance(file_name, str): raise TypeError("file_name должен быть строкой") # Проверяем, что файл имеет правильное расширение if not file_name.endswith('.json'): raise ValueError("file_name должен иметь расширение .json") self.__file_name = file_name # Используем приватный атрибут def get_file_name(self): return self.__file_name def save_vacancy(self, vacancies): """Этот метод сохраняет данные о вакансиях в файл.""" if os.path.exists(self.__file_name): # Проверяем, существует ли файл with open(self.__file_name, 'r', encoding="utf-8") as file: data = json.load(file) else: data = [] # Добавляем новые вакансии, если их нет в файле for vacancy in vacancies: if not vacancy.to_dict() in data: data.append(vacancy.to_dict()) # Сохраняем обновленные данные в файл with open(self.__file_name, 'w', encoding="utf-8") as file: json.dump(data, file, indent=4, ensure_ascii=False) def delete_vacancy(self, url): """Этот метод удаляет вакансию из файла по ее URL-адресу.""" if not os.path.exists(self.__file_name): # Проверяем, существует ли файл print("файл не найден") return with open(self.__file_name, 'r', encoding="utf-8") as file: # Открываем и перезаписываем файл data = json.load(file) is_found = False # Если файл не найден for vacancy in data: # Для вакансий в файле данных if vacancy["url"] == url: data.remove(vacancy) is_found = True break if is_found: # Если файл "найден" with open(self.__file_name, 'w', encoding="utf-8") as file: json.dump(data, file, indent=4, ensure_ascii=False) def load_vacancies(self): """Этот метод загружает вакансии из файла и возвращает их в виде списка объектов Vacancy.""" if not os.path.exists(self.__file_name): # Проверяем, существует ли файл print("файл не найден") return [] with open(self.__file_name, 'r', encoding="utf-8") as file: data = json.load(file)