]> git.scottworley.com Git - pinch/blobdiff - pinch.py
Use a proper User-Agent when fetching channel info
[pinch] / pinch.py
index 989e08fd4f6769078290f749650fb7a6811ad397..bbafe6bd811a8860c2c59392a33ec4fe2fe31f6b 100644 (file)
--- a/pinch.py
+++ b/pinch.py
@@ -43,6 +43,8 @@ from typing import (
 
 import git_cache
 
+from version import pinch_version
+
 # Use xdg module when it's less painful to have as a dependency
 
 
@@ -252,7 +254,11 @@ def compare(a: str, b: str) -> Tuple[List[str], List[str], List[str]]:
 def fetch_channel(
         v: Verification, channel: ChannelSearchPath) -> Tuple[str, str]:
     v.status(f'Fetching channel from {channel.channel_url}')
-    with urllib.request.urlopen(channel.channel_url, timeout=10) as request:
+    with urllib.request.urlopen(
+            urllib.request.Request(
+                url=channel.channel_url,
+                headers={'User-Agent': f'pinch-{pinch_version}'}),
+            timeout=10) as request:
         channel_html = request.read().decode()
         forwarded_url = request.geturl()
         v.result(request.status == 200)
@@ -293,14 +299,25 @@ def parse_channel(v: Verification, channel_html: str) \
     v.status(git_revision)
     v.ok()
     v.status('Verifying git commit label')
+    assert git_commit_node.previousSibling is not None
     v.result(git_commit_node.previousSibling.nodeValue == 'Git commit ')
 
     v.status('Parsing table')
     table: Dict[str, ChannelTableEntry] = {}
     for row in d.getElementsByTagName('tr')[1:]:
+        assert isinstance(
+            row.childNodes[0].firstChild, xml.dom.minidom.Element)
+        assert isinstance(
+            row.childNodes[0].firstChild.firstChild, xml.dom.minidom.Text)
         name = row.childNodes[0].firstChild.firstChild.nodeValue
+        assert name is not None
         url = row.childNodes[0].firstChild.getAttribute('href')
+        assert row.childNodes[1].firstChild is not None
+        assert row.childNodes[1].firstChild.nodeValue is not None
         size = int(row.childNodes[1].firstChild.nodeValue)
+        assert row.childNodes[2].firstChild is not None
+        assert row.childNodes[2].firstChild.firstChild is not None
+        assert row.childNodes[2].firstChild.firstChild.nodeValue is not None
         digest = Digest16(row.childNodes[2].firstChild.firstChild.nodeValue)
         table[name] = ChannelTableEntry(url=url, digest=digest, size=size)
     v.ok()