#!/usr/bin/env python # -*- coding: utf-8 -*- import argparse import logging from core import ShellGui from core import Utils from core.CrontabManager import CrontabManager from core.MainController import MainController import signal import sys from core.SynapseLauncher import SynapseLauncher logging.basicConfig() logger = logging.getLogger("jarvis") def signal_handler(signal, frame): print "\n" Utils.print_info("Ctrl+C pressed. Killing Jarvis") sys.exit(0) ACTION_LIST = ["start", "gui", "load-events"] def main(): """ Entry point of jarvis program """ # create arguments parser = argparse.ArgumentParser(description='JARVIS') parser.add_argument("action", help="[start|gui|load-events]") parser.add_argument("--run-synapse", help="Name of a synapse to load surrounded by quote") parser.add_argument("--brain-file", help="Full path of a brain file") parser.add_argument("--debug", action='store_true', help="Show debug output") # parse arguments from script parameters args = parser.parse_args() if len(sys.argv[1:]) == 0: parser.print_usage() sys.exit(1) # check if we want debug configure_logging(debug=args.debug) logger.debug("jarvis args: %s" % args) # by default, no brain file is set. Use the default one: brain.yml in the root path brain_file = None # check the user provide a valid action if args.action not in ACTION_LIST: Utils.print_warning("%s is not a recognised action\n" % args.action) parser.print_help() if args.action == "start": # check if user set a brain.yml file if args.brain_file: brain_file = args.brain_file # user set a synapse to start if args.run_synapse is not None: SynapseLauncher.start_synapse(args.run_synapse, brain_file=brain_file) if args.run_synapse is None: Utils.print_success("Starting JARVIS") Utils.print_info("Press Ctrl+C for stopping") # catch signal for killing on Ctrl+C pressed signal.signal(signal.SIGINT, signal_handler) # start the main controller main_controller = MainController(brain_file=brain_file) main_controller.start() if args.action == "gui": ShellGui() if args.action == "load-events": crontab_manager = CrontabManager(brain_file=brain_file) crontab_manager.load_events_in_crontab() Utils.print_success("Events loaded in crontab") def configure_logging(debug=None): """ Prepare log folder in current home directory :param debug: If true, set the lof level to debug :return: """ logger = logging.getLogger("jarvis") logger.propagate = False ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)s :: %(levelname)s :: %(message)s') ch.setFormatter(formatter) # add the handlers to logger logger.addHandler(ch) if debug: logger.setLevel(logging.DEBUG) else: logger.setLevel(logging.INFO) logger.debug("Logger ready") if __name__ == '__main__': main()