]> git.scottworley.com Git - paperdoorknob/commitdiff
Always have Thread.__init__ fetch the HTML
authorScott Worley <scottworley@scottworley.com>
Fri, 12 Jan 2024 04:57:25 +0000 (20:57 -0800)
committerScott Worley <scottworley@scottworley.com>
Fri, 12 Jan 2024 11:59:15 +0000 (03:59 -0800)
glowfic.py
glowfic_test.py

index 8029b5d704f1bffab897426c34a16a8b44fe30fb..5ffaac31921e360961967832ad090074e5cd2aaa 100644 (file)
@@ -57,15 +57,11 @@ class Chunk:
 
 class Thread:
 
 
 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")
 
     def title(self) -> str | None:
         span = self._dom.findChild("span", id="post-title")
index 64da1649b1209b2bb5b37f914e6f40f65aae89b7..52d6f86cb9a1681ccaf4d34e3784d054e5352ed5 100644 (file)
@@ -5,45 +5,61 @@
 # Free Software Foundation, version 3.
 
 
 # Free Software Foundation, version 3.
 
 
+from sys import stderr
 import unittest
 
 import unittest
 
-from bs4 import BeautifulSoup
-
+from fetch import FakeFetcher
 from images import FakeImageStore
 from glowfic import makeChunk, Thread
 from images import FakeImageStore
 from glowfic import makeChunk, Thread
+from spec import Spec
 from texify import PandocTexifier
 
 
 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:
 class TestSplit(unittest.TestCase):
 
     def testSplit1(self) -> None:
-        t = Thread(BeautifulSoup(b'''
+        t = Thread(spec_for_testing(b'''
             <html><body><div class="post-container post-post">
               The "post"
             <html><body><div class="post-container post-post">
               The "post"
-            </div></body></html>''', 'html.parser'))
+            </div></body></html>'''))
         self.assertEqual([list(t.stripped_strings) for t in t.chunkDOMs()],
                          [['The "post"']])
 
     def testSplit2(self) -> None:
         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'''
             <html><body>
               <div class="post-container post-post">The "post"</div>
               <div class="flat-post-replies">
                 <div class="post-container post-reply">The "reply"</div>
               </div>
             <html><body>
               <div class="post-container post-post">The "post"</div>
               <div class="flat-post-replies">
                 <div class="post-container post-reply">The "reply"</div>
               </div>
-            </body></html>''', 'html.parser'))
+            </body></html>'''))
         self.assertEqual([list(t.stripped_strings) for t in t.chunkDOMs()],
                          [['The "post"'], ['The "reply"']])
 
     def testSplit3(self) -> None:
         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'''
             <html><body>
               <div class="post-container post-post">The "post"</div>
               <div class="flat-post-replies">
                 <div class="post-container post-reply">1st reply</div>
                 <div class="post-container post-reply">2nd reply</div>
               </div>
             <html><body>
               <div class="post-container post-post">The "post"</div>
               <div class="flat-post-replies">
                 <div class="post-container post-reply">1st reply</div>
                 <div class="post-container post-reply">2nd reply</div>
               </div>
-            </body></html>''', 'html.parser'))
+            </body></html>'''))
         self.assertEqual([list(t.stripped_strings) for t in t.chunkDOMs()],
                          [['The "post"'], ['1st reply'], ['2nd reply']])
 
         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:
 
     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,
         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:
 class TestThread(unittest.TestCase):
 
     def testTitle(self) -> None:
-        t = Thread(BeautifulSoup(b'''
+        t = Thread(spec_for_testing(b'''
             <html><body>
               <div class="content-header">
                 <span id="post-title">
             <html><body>
               <div class="content-header">
                 <span id="post-title">
@@ -83,7 +99,7 @@ class TestThread(unittest.TestCase):
                 </span>
               </div>
               <div class="post-container post-post">The "post"</div>
                 </span>
               </div>
               <div class="post-container post-post">The "post"</div>
-            </body></html>''', 'html.parser'))
+            </body></html>'''))
         self.assertEqual(t.title(), 'Teh Story!')
 
 
         self.assertEqual(t.title(), 'Teh Story!')