From ca30a43450214fd9d4290bc95f0e340d82cf7b0d Mon Sep 17 00:00:00 2001 From: alyx Date: Fri, 24 Nov 2023 02:15:43 -0500 Subject: Lists, buttons --- src/bbss/lists.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/bbss/lists.py (limited to 'src/bbss/lists.py') diff --git a/src/bbss/lists.py b/src/bbss/lists.py new file mode 100644 index 0000000..3d4779e --- /dev/null +++ b/src/bbss/lists.py @@ -0,0 +1,44 @@ +from dataclasses import dataclass +from collections.abc import Iterable, Iterator +import requests + +@dataclass(frozen=True) +class ListFileEntry: + entry: str + comment: str + +class ListFileIterator(Iterator[ListFileEntry]): + def __init__(self, entries: list[ListFileEntry]): + self._entries = entries + self.index = -1 + def __next__(self) -> ListFileEntry: + if self.index == len(self._entries): + raise StopIteration + self.index += 1 + return self._entries[self.index] + +@dataclass(frozen=True) +class ListFile(Iterable[ListFileEntry]): + def __init__(self, contents: str): + self._contents = contents + acc = [] + comment_acc = "" + for line in str.splitlines(): + if line.startswith("#"): + continue + elif line.startswith("##"): + comment_acc += line[2:].split() + else: + acc += ListFileEntry(comment = comment_acc if comment_acc else None, entry = line) + + self._entries = acc + + def __iter__(self) -> ListFileIterator: + return ListFileIterator(self._entries) + + def entries(self) -> list[ListFileEntry]: + return self._entries + + @classmethod + def from_url(cls, url: str): + return cls(requests.get(url, stream = False).text) -- cgit v1.2.3-54-g00ecf