jarvis.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #!/usr/bin/env python
  2. import argparse
  3. import logging
  4. from core import ShellGui
  5. from core import Utils
  6. from core.CrontabManager import CrontabManager
  7. from core.MainController import MainController
  8. import signal
  9. import sys
  10. from core.SynapseLauncher import SynapseLauncher
  11. def signal_handler(signal, frame):
  12. print "\n"
  13. Utils.print_info("Ctrl+C pressed. Killing Jarvis")
  14. sys.exit(0)
  15. ACTION_LIST = ["start", "gui", "load-events"]
  16. def main():
  17. """
  18. Entry point of jarvis program
  19. """
  20. # create arguments
  21. parser = argparse.ArgumentParser(description='JARVIS')
  22. parser.add_argument("action", help="[start|gui|load-events]")
  23. parser.add_argument("--run-synapse", help="Name of a synapse to load surrounded by quote")
  24. parser.add_argument("--brain-file", help="Full path of a brain file")
  25. # parse arguments from script parameters
  26. args = parser.parse_args()
  27. logging.debug("jarvis args: %s" % args)
  28. if len(sys.argv[1:]) == 0:
  29. parser.print_usage()
  30. sys.exit(1)
  31. # by default, no brain file is set. Use the default one: brain.yml in the root path
  32. brain_file = None
  33. # check the user provide a valid action
  34. if args.action not in ACTION_LIST:
  35. Utils.print_warning("%s is not a recognised action\n" % args.action)
  36. parser.print_help()
  37. if args.action == "start":
  38. # check if user set a brain.yml file
  39. if args.brain_file:
  40. brain_file = args.brain_file
  41. # user set a synapse to start
  42. if args.run_synapse is not None:
  43. SynapseLauncher.start_synapse(args.run_synapse, brain_file=brain_file)
  44. if args.run_synapse is None:
  45. Utils.print_success("Starting JARVIS")
  46. Utils.print_info("Press Ctrl+C for stopping")
  47. # catch signal for killing on Ctrl+C pressed
  48. signal.signal(signal.SIGINT, signal_handler)
  49. # start the main controller
  50. main_controller = MainController(brain_file=brain_file)
  51. main_controller.start()
  52. if args.action == "gui":
  53. ShellGui()
  54. if args.action == "load-events":
  55. crontab_manager = CrontabManager(brain_file=brain_file)
  56. crontab_manager.load_events_in_crontab()
  57. Utils.print_success("Event loaded in crontab")
  58. if __name__ == '__main__':
  59. main()