summaryrefslogtreecommitdiff
path: root/crocoite/cli.py
diff options
context:
space:
mode:
authorLars-Dominik Braun <lars@6xq.net>2018-10-23 16:24:38 +0200
committerLars-Dominik Braun <lars@6xq.net>2018-10-23 16:25:33 +0200
commit3cc7b39bd5d3d54e0fcc569385ce105e63425a63 (patch)
treea3785a91ff69721d2656f42d3def27caa898a567 /crocoite/cli.py
parent513dfcc432ce20e62623c97ca44352211c1422a0 (diff)
downloadcrocoite-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.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