From: Scott Worley Date: Fri, 26 Jan 2024 07:27:15 +0000 (-0800) Subject: Follow 'Next Thread →' links X-Git-Url: http://git.scottworley.com/paperdoorknob/commitdiff_plain/6f430a74788227e683316633d93b2f8c1612ec92?hp=d6e27f4bb8ab56ca2545a72ab3433a12b1eb4a7f Follow 'Next Thread →' links --- diff --git a/glowfic.py b/glowfic.py index ef71eef..94fbd34 100644 --- a/glowfic.py +++ b/glowfic.py @@ -5,7 +5,7 @@ # Free Software Foundation, version 3. -from dataclasses import dataclass +import dataclasses import itertools from urllib.parse import parse_qsl, urlencode, urljoin, urlparse, urlunparse @@ -40,7 +40,7 @@ def flatURL(url: str) -> str: return urlunparse(u._replace(query=urlencode(qs))) -@dataclass(frozen=True) +@dataclasses.dataclass(frozen=True) class Chunk: icon: str | None character: Tag | None @@ -116,6 +116,9 @@ class Thread: self._spec.texout.write( self._spec.texfilter(renderChunk(self._spec.texifier, chunk))) self._spec.log('') + next_url = self.next_thread() + if next_url is not None: + Thread(dataclasses.replace(self._spec, url=next_url)).emit() def makeChunk(chunk_dom: Tag, image_store: ImageStore) -> Chunk: diff --git a/glowfic_test.py b/glowfic_test.py index befd0b5..d3fb2dd 100644 --- a/glowfic_test.py +++ b/glowfic_test.py @@ -4,6 +4,7 @@ # under the terms of the GNU General Public License as published by the # Free Software Foundation, version 3. +import dataclasses from io import BytesIO from sys import stderr import unittest @@ -164,6 +165,36 @@ class TestEmit(unittest.TestCase): \glowhead{}{}{}{}B ''') + def testEmitTwoThreads(self) -> None: + buf = BytesIO() + spec = dataclasses.replace(spec_for_testing(b'', buf), fetcher=FakeFetcher({ + 'https://fake/test': b''' +
+
Next Post »
+
''', + 'https://fake/test?view=flat': b''' +
A
+
+
B
+
+ ''', + 'https://fake/page2': b'''''', + 'https://fake/page2?view=flat': b''' +
C
+
+
D
+
E
+
+ ''', + })) + Thread(spec).emit() + self.assertEqual(buf.getvalue(), rb'''\glowhead{}{}{}{}A +\glowhead{}{}{}{}B +\glowhead{}{}{}{}C +\glowhead{}{}{}{}D +\glowhead{}{}{}{}E +''') + if __name__ == '__main__': unittest.main()