diff options
author | Lars-Dominik Braun <lars@6xq.net> | 2018-10-23 16:24:38 +0200 |
---|---|---|
committer | Lars-Dominik Braun <lars@6xq.net> | 2018-10-23 16:25:33 +0200 |
commit | 3cc7b39bd5d3d54e0fcc569385ce105e63425a63 (patch) | |
tree | a3785a91ff69721d2656f42d3def27caa898a567 /crocoite/cli.py | |
parent | 513dfcc432ce20e62623c97ca44352211c1422a0 (diff) | |
download | crocoite-3cc7b39bd5d3d54e0fcc569385ce105e63425a63.tar.gz crocoite-3cc7b39bd5d3d54e0fcc569385ce105e63425a63.tar.bz2 crocoite-3cc7b39bd5d3d54e0fcc569385ce105e63425a63.zip |
single: Set and recursive: check exit status
Use exit status to signal something is wrong. Check it within recursive,
increment crashed counter and do not move the resulting WARC, it might
be broken.
Diffstat (limited to 'crocoite/cli.py')
-rw-r--r-- | crocoite/cli.py | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/crocoite/cli.py b/crocoite/cli.py index 6365c78..ab336e1 100644 --- a/crocoite/cli.py +++ b/crocoite/cli.py @@ -23,14 +23,21 @@ Command line interface """ import argparse, json, sys, signal +from enum import IntEnum from . import behavior from .controller import SinglePageController, defaultSettings, \ ControllerSettings, StatsHandler, LogHandler -from .browser import NullService, ChromeService +from .browser import NullService, ChromeService, BrowserCrashed from .warc import WarcHandler from .logger import Logger, JsonPrintConsumer, DatetimeConsumer, WarcHandlerConsumer +class SingleExitStatus(IntEnum): + """ Exit status for single-shot command line """ + Ok = 0 + Fail = 1 + BrowserCrash = 2 + def single (): parser = argparse.ArgumentParser(description='Save website to WARC using Google Chrome.') parser.add_argument('--browser', help='DevTools URL', metavar='URL') @@ -48,6 +55,7 @@ def single (): logger = Logger (consumer=[DatetimeConsumer (), JsonPrintConsumer ()]) + ret = SingleExitStatus.Fail service = ChromeService () if args.browser: service = NullService (args.browser) @@ -59,11 +67,16 @@ def single (): b = list (map (lambda x: behavior.availableMap[x], args.enabledBehaviorNames)) controller = SinglePageController (args.url, fd, settings=settings, service=service, handler=handler, behavior=b, logger=logger) - controller.run () - r = handler[0].stats - logger.info ('stats', context='cli', uuid='24d92d16-770e-4088-b769-4020e127a7ff', **r) + try: + controller.run () + ret = SingleExitStatus.Ok + except BrowserCrashed: + ret = SingleExitStatus.BrowserCrash + finally: + r = handler[0].stats + logger.info ('stats', context='cli', uuid='24d92d16-770e-4088-b769-4020e127a7ff', **r) - return True + return ret import asyncio, os from .controller import RecursiveController, DepthLimit, PrefixLimit @@ -110,6 +123,8 @@ def recursive (): loop.run_until_complete(controller.run ()) loop.close() + return 0 + def irc (): from configparser import ConfigParser from .irc import Chromebot |