summaryrefslogtreecommitdiff
path: root/crocoite/cli.py
diff options
context:
space:
mode:
Diffstat (limited to 'crocoite/cli.py')
-rw-r--r--crocoite/cli.py25
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