don't print tracebacks for networking errors

closes #108.
This commit is contained in:
lilydjwg 2019-05-01 17:16:17 +08:00
parent 8ade0f68b0
commit b014759f81
6 changed files with 39 additions and 5 deletions

View File

@ -162,7 +162,7 @@ newver
Specify a version record file to store the new version info.
proxy
The HTTP proxy to use. The format is ``host:port``, e.g. ``localhost:8087``.
The HTTP proxy to use. The format is ``proto://host:port``, e.g. ``http://localhost:8087``.
max_concurrent
Max number of concurrent jobs. Default: 20.

View File

@ -38,6 +38,7 @@ def process_common_arguments(args):
'''return True if should stop'''
processors = [
slogconf.exc_info,
slogconf.filter_exc,
]
logger_factory = None

View File

@ -6,9 +6,12 @@ import logging
import os
import io
import traceback
import sys
import structlog
from .source import HTTPError, NetworkErrors
def _console_msg(event):
evt = event['event']
if evt == 'up-to-date':
@ -36,6 +39,24 @@ def exc_info(logger, level, event):
event['exc_info'] = True
return event
def filter_exc(logger, level, event):
exc_info = event.get('exc_info')
if not exc_info:
return event
if exc_info is True:
exc = sys.exc_info()[1]
else:
exc = exc_info
if isinstance(exc, HTTPError):
if exc.code == 599: # tornado timeout
del event['exc_info']
elif isinstance(exc, NetworkErrors):
del event['exc_info']
event['error'] = exc
return event
def stdlib_renderer(logger, level, event):
# return event unchanged for further processing
std_event = _console_msg(event.copy())
@ -45,6 +66,8 @@ def stdlib_renderer(logger, level, event):
logger = logging.getLogger()
msg = std_event.pop('msg', std_event.pop('event'))
exc_info = std_event.pop('exc_info', None)
if 'error' in std_event:
std_event['error'] = repr(std_event['error'])
getattr(logger, level)(
msg, exc_info = exc_info, extra=std_event,
)

View File

@ -6,7 +6,7 @@ import asyncio
import aiohttp
connector = aiohttp.TCPConnector(limit=20)
__all__ = ['session', 'HTTPError']
__all__ = ['session', 'HTTPError', 'NetworkErrors']
class HTTPError(Exception):
def __init__(self, code, message, response):
@ -25,9 +25,17 @@ class BetterClientSession(aiohttp.ClientSession):
raise HTTPError(res.status, res.reason, res)
return res
session = BetterClientSession(connector=connector)
session = BetterClientSession(
connector = connector,
timeout = aiohttp.ClientTimeout(total=20),
)
@atexit.register
def cleanup():
loop = asyncio.get_event_loop()
loop.run_until_complete(session.close())
NetworkErrors = (
asyncio.TimeoutError,
aiohttp.ClientConnectorError,
)

View File

@ -15,7 +15,7 @@ try:
except ImportError:
pycurl = None
__all__ = ['session', 'HTTPError']
__all__ = ['session', 'HTTPError', 'NetworkErrors']
client = AsyncHTTPClient()
HTTP2_AVAILABLE = None if pycurl else False
@ -73,3 +73,5 @@ async def read(self):
HTTPResponse.json = json_response
HTTPResponse.read = read
session = Session()
NetworkErrors = ()

View File

@ -25,7 +25,7 @@ github = lilydjwg/nvchecker
[ssed]
url = http://sed.sourceforge.net/grabbag/ssed/
regex = The current version is ([\d.]+)\.
proxy = localhost:8087
proxy = http://localhost:8087
[PySide]
pypi = PySide