blob: 234d0f8c74f7199fa6ec9aa51f0aa1ef14e238cf (
plain) (
tree)
|
|
from dataclasses import dataclass
from collections.abc import Iterable, Iterator
from typing import Optional
import requests
@dataclass(frozen=True)
class ListFileEntry:
entry: str
comment: Optional[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 contents.splitlines():
if line.startswith("#"):
continue
elif line.startswith("##"):
comment_acc += line[2:].strip()
else:
acc.append(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)
|