aboutsummaryrefslogtreecommitdiff
path: root/tagrss.py
diff options
context:
space:
mode:
authorArjun Satarkar <me@arjunsatarkar.net>2023-08-03 22:18:05 +0000
committerArjun Satarkar <me@arjunsatarkar.net>2023-08-03 22:18:05 +0000
commit353001c9258de2cd1f8fcc026ea954cae624f669 (patch)
treecb28b9c3eae4878e4c6e54af35e29861959042fb /tagrss.py
parenta45bcb74dde80ee576bfcbc2f3efb719e8f6b2d9 (diff)
downloadtagrss-353001c9258de2cd1f8fcc026ea954cae624f669.tar
tagrss-353001c9258de2cd1f8fcc026ea954cae624f669.tar.gz
tagrss-353001c9258de2cd1f8fcc026ea954cae624f669.zip
Handle more network errors
Diffstat (limited to 'tagrss.py')
-rw-r--r--tagrss.py26
1 files changed, 13 insertions, 13 deletions
diff --git a/tagrss.py b/tagrss.py
index 8c9ec81..ce67047 100644
--- a/tagrss.py
+++ b/tagrss.py
@@ -31,22 +31,19 @@ class FeedTitleAlreadyInUseError(StorageError):
class StorageConstraintViolationError(StorageError):
- def __init__(self, error):
- super().__init__(error)
-
-
-class SqliteMissingForeignKeySupportError(StorageError):
pass
-
-class NetworkError(Exception):
+class SqliteMissingForeignKeySupportError(StorageError):
pass
-class FeedFetchError(NetworkError):
- def __init__(self, feed_source: str, status_code: int):
- super().__init__(f"Get {feed_source} returned HTTP {status_code}")
-
+class FeedFetchError(Exception):
+ def __init__(self, *, feed_source: str, status_code: typing.Optional[int] = None, underlying: typing.Optional[Exception] = None):
+ if status_code:
+ self.status_code = status_code
+ super().__init__(f"Get {feed_source} returned HTTP {status_code}")
+ else:
+ super().__init__(f"Get {feed_source} failed: {underlying}")
FeedId = int
Epoch = int
@@ -397,10 +394,13 @@ class TagRss:
self.__storage = SqliteStorageProvider(storage_path)
def __fetch_and_parse_feed(self, source) -> tuple[ParsedFeed, Epoch]:
- response = requests.get(source)
+ try:
+ response = requests.get(source)
+ except requests.ConnectionError as e:
+ raise FeedFetchError(feed_source=source, underlying=e)
epoch_downloaded: int = int(time.time())
if response.status_code != requests.codes.ok:
- raise FeedFetchError(source, response.status_code)
+ raise FeedFetchError(feed_source=source, status_code=response.status_code)
try:
base: str = response.headers["Content-Location"]
except KeyError: