~cnx/misc

fead: Add option to skip errors v1 NEEDS REVISION

Ngô Ngọc Đức Huy: 1
 Add option to skip errors

 1 files changed, 18 insertions(+), 3 deletions(-)
Export patchset (mbox)
How do I use this?

Copy & paste the following snippet into your terminal to import this patchset into git:

curl -s https://lists.sr.ht/~cnx/misc/patches/44160/mbox | git am -3
Learn more about email & git

[PATCH fead] Add option to skip errors Export this patch

---
 src/fead.py | 21 ++++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)

diff --git a/src/fead.py b/src/fead.py
index 370b623..5f4657f 100755
--- a/src/fead.py
+++ b/src/fead.py
@@ -185,9 +185,19 @@ async def fetch(raw_url):
                        response.getheaders(), response)


async def fetch_all(urls):
async def fetch_skip_error(url):
    try:
        await fetch(url)
    except Exception as e:
        warn(f'fail to fetch {url}: {e}', type('ErrorWarning', (Warning,), {}))


async def fetch_all(urls, skip_error):
    """Fetch all given URLs asynchronously and return them parsed."""
    tasks = gather(*map(fetch, urls))
    if skip_error:
        tasks = gather(*map(fetch_skip_error, urls))
    else:
        tasks = gather(*map(fetch, urls))
    try:
        return await tasks
    except:
@@ -234,11 +244,16 @@ def main():
    parser.add_argument('-o', '--output', metavar='PATH',
                        type=FileType('w'), default=stdout,
                        help='output file (default to stdout)')
    parser.add_argument('-s', '--skip-error', action='store_true',
                        default=False,
                        help="errors not causing failure but logged")
    args = parser.parse_args()

    template = args.template.read()
    args.template.close()
    for ad in select(args.count, (ad for feed in run(fetch_all(args.feeds))
    for ad in select(args.count, (ad for feed in run(fetch_all(args.feeds,
                                                               args.skip_error))
                                  if feed is not None
                                  for ad in select(args.per_feed, feed))):
        args.output.write(template.format(**truncate(ad, args.len)._asdict()))
    args.output.close()
-- 
2.40.1