from .lists import ListFile, ListFileEntry, ListFileIterator from dataclasses import dataclass import requests @dataclass(frozen=True) class ButtonListFileEntry(ListFileEntry): root: str def url(self) -> str: return self.root + "/" + self.entry def exists(self) -> bool: return requests.head(self.url()).ok class ButtonListFileIterator(ListFileIterator): def __next__(self) -> ButtonListFileEntry: return super().__next__() @dataclass(frozen=True) class ButtonListFile(ListFile): def __init__(self, contents: str, root: str): super().__init__(contents) self.root = root @classmethod def from_url(cls, url: str): (root, _, _) = url.rpartition('/') return cls(requests.get(url, stream = False).text, root)