diff --git a/ffun/ffun/feeds/entities.py b/ffun/ffun/feeds/entities.py index 5978121a..38d66353 100644 --- a/ffun/ffun/feeds/entities.py +++ b/ffun/ffun/feeds/entities.py @@ -32,6 +32,9 @@ class FeedError(enum.IntEnum): network_ssl_connection_error = 1014 network_all_connection_attempts_failed = 1015 network_received_unkomplete_body = 1016 + network_decoding_error = 1017 + network_read_error = 1018 + network_temporary_failure_in_name_resolution = 1019 parsing_unknown = 2000 parsing_base_error = 2001 @@ -44,6 +47,8 @@ class FeedError(enum.IntEnum): proxy_could_not_resolve_host = 4001 proxy_connection_refused = 4002 + proxy_connection_403 = 4003 + proxy_no_route_to_host = 4004 class Feed(BaseEntity): diff --git a/ffun/ffun/loader/domain.py b/ffun/ffun/loader/domain.py index 191f1c28..1f9b7f39 100644 --- a/ffun/ffun/loader/domain.py +++ b/ffun/ffun/loader/domain.py @@ -63,12 +63,26 @@ async def load_content( # noqa: CFQ001, CCR001, C901 # pylint: disable=R0912, R raise errors.LoadError(feed_error_code=error_code) from e + except httpx.ReadError as e: + message = str(e) + + if message == "": + error_code = FeedError.network_read_error + log.warning("network_read_error") + else: + log.exception("unknown_read_error_while_loading_feed") + + raise errors.LoadError(feed_error_code=error_code) from e + except httpx.ConnectError as e: message = str(e) if "[Errno -2]" in message: log.warning("network_name_or_service_not_known") error_code = FeedError.network_name_or_service_not_known + elif "[Errno -3]" in message: + log.warning("network_temporary_failure_in_name_resolution") + error_code = FeedError.network_temporary_failure_in_name_resolution elif "[Errno -5]" in message: log.warning("no_address_associated_with_hostname") error_code = FeedError.network_no_address_associated_with_hostname @@ -128,16 +142,27 @@ async def load_content( # noqa: CFQ001, CCR001, C901 # pylint: disable=R0912, R message = str(e) if message.startswith("502 Could not resolve host"): - log.warning("network_could_not_resolve_host") + log.warning("proxy_could_not_resolve_host") error_code = FeedError.proxy_could_not_resolve_host elif "TUN_ERR" in message and "ECONNREFUSED" in message: - log.warning("network_connection_refused") + log.warning("proxy_connection_refused") error_code = FeedError.proxy_connection_refused + elif "TUN_ERR" in message and "EHOSTUNREACH" in message: + log.warning("proxy_no_route_to_host") + error_code = FeedError.proxy_no_route_to_host + elif "403" in message: + log.warning("proxy_connection_403") + error_code = FeedError.proxy_connection_403 else: log.exception("unknown_proxy_error_while_loading_feed") raise errors.LoadError(feed_error_code=error_code) from e + except httpx.DecodingError as e: + log.warning("network_decoding_error") + error_code = FeedError.network_decoding_error + raise errors.LoadError(feed_error_code=error_code) from e + except Exception as e: log.exception("error_while_loading_feed") raise errors.LoadError(feed_error_code=error_code) from e