from _typeshed import Incomplete
from m_crawler.engine.abstract_request import AbstractRequest as AbstractRequest
from queue import Queue
from typing_extensions import Optional

class Scheduler:
    lock: Incomplete
    queue: Queue[Optional[AbstractRequest]]
    seen_urls: set[str]
    max_retry_count: Incomplete
    def __init__(self, max_retry_count: int = 3) -> None: ...
    def seen(self, url: str) -> bool: ...
    def push(self, req: Optional[AbstractRequest]) -> None: ...
    def pop(self) -> Optional[AbstractRequest]: ...
    def push_retry(self, req: AbstractRequest) -> bool: ...
    @property
    def no_more_data(self) -> bool: ...
    @no_more_data.setter
    def no_more_data(self, flag: bool) -> None: ...
