This commit is contained in:
47
parsers/base.py
Normal file
47
parsers/base.py
Normal file
@@ -0,0 +1,47 @@
|
||||
"""
|
||||
Базовый класс парсера
|
||||
"""
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import List
|
||||
import work_parser as wp
|
||||
|
||||
|
||||
class BaseParser(ABC):
|
||||
"""
|
||||
Базовый класс для всех парсеров
|
||||
"""
|
||||
|
||||
def __init__(self, source_name: str):
|
||||
self.source_name = source_name
|
||||
self.task_id = None
|
||||
|
||||
def start_task(self, source_url: str) -> int:
|
||||
"""
|
||||
Создаёт задачу парсинга и возвращает её ID
|
||||
"""
|
||||
self.task_id = wp.insert_task(status='queued', source_url=source_url)
|
||||
print(f"Создана задача с id: {self.task_id}")
|
||||
return self.task_id
|
||||
|
||||
def complete_task(self) -> None:
|
||||
"""
|
||||
Завершает задачу парсинга
|
||||
"""
|
||||
if self.task_id:
|
||||
from datetime import datetime
|
||||
wp.update_task(self.task_id, status='completed', finished_at=datetime.utcnow())
|
||||
|
||||
def fail_task(self) -> None:
|
||||
"""
|
||||
Отмечает задачу как неудачную
|
||||
"""
|
||||
if self.task_id:
|
||||
from datetime import datetime
|
||||
wp.update_task(self.task_id, status='failed', finished_at=datetime.utcnow())
|
||||
|
||||
@abstractmethod
|
||||
def parse(self) -> None:
|
||||
"""
|
||||
Основной метод парсинга - должен быть реализован в наследниках
|
||||
"""
|
||||
pass
|
||||
Reference in New Issue
Block a user