From 19ed28f37b59e480cebe8f122e07ce18ce536db8 Mon Sep 17 00:00:00 2001 From: Scott Worley Date: Thu, 11 Jan 2024 20:57:25 -0800 Subject: [PATCH] Always have Thread.__init__ fetch the HTML --- glowfic.py | 14 +++++--------- glowfic_test.py | 38 +++++++++++++++++++++++++++----------- 2 files changed, 32 insertions(+), 20 deletions(-) diff --git a/glowfic.py b/glowfic.py index 8029b5d..5ffaac3 100644 --- a/glowfic.py +++ b/glowfic.py @@ -57,15 +57,11 @@ class Chunk: class Thread: - def __init__(self, thing: BeautifulSoup | Spec) -> None: - if isinstance(thing, Spec): - spec = thing - spec.log('Fetching HTML...\r') - html = spec.fetcher.fetch(flatURL(spec.url)) - spec.log('Parsing HTML...\r') - self._dom = BeautifulSoup(spec.htmlfilter(html), 'html.parser') - else: - self._dom = thing + def __init__(self, spec: Spec) -> None: + spec.log('Fetching HTML...\r') + html = spec.fetcher.fetch(flatURL(spec.url)) + spec.log('Parsing HTML...\r') + self._dom = BeautifulSoup(spec.htmlfilter(html), 'html.parser') def title(self) -> str | None: span = self._dom.findChild("span", id="post-title") diff --git a/glowfic_test.py b/glowfic_test.py index 64da164..52d6f86 100644 --- a/glowfic_test.py +++ b/glowfic_test.py @@ -5,45 +5,61 @@ # Free Software Foundation, version 3. +from sys import stderr import unittest -from bs4 import BeautifulSoup - +from fetch import FakeFetcher from images import FakeImageStore from glowfic import makeChunk, Thread +from spec import Spec from texify import PandocTexifier +def spec_for_testing(html: bytes) -> Spec: + return Spec('test', + FakeFetcher({'test?view=flat': html}), + FakeImageStore(), + lambda x: x, + lambda x: None, + PandocTexifier('pandoc'), + lambda x: x, + 20, + b'', + None, + stderr.buffer, + lambda x: None) + + class TestSplit(unittest.TestCase): def testSplit1(self) -> None: - t = Thread(BeautifulSoup(b''' + t = Thread(spec_for_testing(b'''
The "post" -
''', 'html.parser')) + ''')) self.assertEqual([list(t.stripped_strings) for t in t.chunkDOMs()], [['The "post"']]) def testSplit2(self) -> None: - t = Thread(BeautifulSoup(b''' + t = Thread(spec_for_testing(b'''
The "post"
The "reply"
- ''', 'html.parser')) + ''')) self.assertEqual([list(t.stripped_strings) for t in t.chunkDOMs()], [['The "post"'], ['The "reply"']]) def testSplit3(self) -> None: - t = Thread(BeautifulSoup(b''' + t = Thread(spec_for_testing(b'''
The "post"
1st reply
2nd reply
- ''', 'html.parser')) + ''')) self.assertEqual([list(t.stripped_strings) for t in t.chunkDOMs()], [['The "post"'], ['1st reply'], ['2nd reply']]) @@ -52,7 +68,7 @@ class TestMakeChunk(unittest.TestCase): def testEmptyContent(self) -> None: with open('testdata/empty-content.html', 'rb') as f: - t = Thread(BeautifulSoup(f, 'html.parser')) + t = Thread(spec_for_testing(f.read((9999)))) c = makeChunk(next(iter(t.chunkDOMs())), FakeImageStore()) self.assertEqual( c.icon, @@ -75,7 +91,7 @@ class TestMakeChunk(unittest.TestCase): class TestThread(unittest.TestCase): def testTitle(self) -> None: - t = Thread(BeautifulSoup(b''' + t = Thread(spec_for_testing(b'''
@@ -83,7 +99,7 @@ class TestThread(unittest.TestCase):
The "post"
- ''', 'html.parser')) + ''')) self.assertEqual(t.title(), 'Teh Story!') -- 2.44.1