# Free Software Foundation, version 3.
-from dataclasses import dataclass
+import dataclasses
import itertools
from urllib.parse import parse_qsl, urlencode, urljoin, urlparse, urlunparse
return urlunparse(u._replace(query=urlencode(qs)))
-@dataclass(frozen=True)
+@dataclasses.dataclass(frozen=True)
class Chunk:
icon: str | None
character: Tag | None
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:
# 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
\glowhead{}{}{}{}B
''')
+ def testEmitTwoThreads(self) -> None:
+ buf = BytesIO()
+ spec = dataclasses.replace(spec_for_testing(b'', buf), fetcher=FakeFetcher({
+ 'https://fake/test': b'''<html><body>
+ <div class="post-navheader">
+ <a class="view-button-link" href="/page2"><div class="view-button">Next Post »</div></a>
+ </div></body></html>''',
+ 'https://fake/test?view=flat': b'''<html><body>
+ <div class="post-container post-post"><div class="post-content">A</div></div>
+ <div class="flat-post-replies">
+ <div class="post-container post-reply"><div class="post-content">B</div></div>
+ </div>
+ </body></html>''',
+ 'https://fake/page2': b'''<html><body></body></html>''',
+ 'https://fake/page2?view=flat': b'''<html><body>
+ <div class="post-container post-post"><div class="post-content">C</div></div>
+ <div class="flat-post-replies">
+ <div class="post-container post-reply"><div class="post-content">D</div></div>
+ <div class="post-container post-reply"><div class="post-content">E</div></div>
+ </div>
+ </body></html>''',
+ }))
+ Thread(spec).emit()
+ self.assertEqual(buf.getvalue(), rb'''\glowhead{}{}{}{}A
+\glowhead{}{}{}{}B
+\glowhead{}{}{}{}C
+\glowhead{}{}{}{}D
+\glowhead{}{}{}{}E
+''')
+
if __name__ == '__main__':
unittest.main()