blob: 3d4779e7b3c21ec1b41390dcaf52d887dd6edc47 (
plain) (
tree)
|
|
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)
|