diff options
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 | 
