def getCurrentGoalDescription(self): """ Return a description (in the specification language) of the goal currently being pursued (jx). If no automaton is loaded, return None. """ if not self.aut: return None curr_goal_num = self.getCurrentGoalNumber() if self.proj.compile_options["parser"] == "slurp": # Import the SLURP dialog manager, if necessary try: dm = self.SLURPDialogManager except AttributeError: # Add SLURP to path for import sys.path.append( os.path.join(project.get_ltlmop_root(), "src", "etc", "SLURP")) from ltlbroom.dialog import DialogManager self.SLURPDialogManager = DialogManager() dm = self.SLURPDialogManager dm.set_gen_tree(self.parserTraceback) return dm.explain_goal(int(curr_goal_num)) else: return str(curr_goal_num)
def setupLogging(loggerLevel=None): # Set up loggers for printing error messages class ColorLogFormatter(logging.Formatter): def __init__(self, *args, **kwds): super(ColorLogFormatter, self).__init__(*args, **kwds) self.plain_formatter = logging.Formatter( " [ %(module)s ] %(message)s") self.detailed_formatter = logging.Formatter( " --> [%(levelname)s] (%(pathname)s, line %(lineno)s): %(message)s" ) def colorize(self, level, string): if sys.platform in ['win32', 'cygwin']: # Message with color is not yet supported in Windows return string elif not hasattr(sys.stderr, "isatty") or not sys.stderr.isatty(): # Only try to colorize if outputting to a terminal return string else: colors = {'ERROR': 91, 'WARNING': 93, 'INFO': 97, 'DEBUG': 94} return "\033[{0}m{1}\033[0m".format(colors[level], string) def format(self, record): if record.levelname == "INFO": precolor = self.plain_formatter.format(record) else: precolor = self.detailed_formatter.format(record) return self.colorize(record.levelname, precolor) logger = logging.getLogger() h = logging.StreamHandler() h.addFilter(logging.Filter('root')) # filter rospy out f = ColorLogFormatter() h.setFormatter(f) logger.addHandler(h) cfg = ConfigParser.ConfigParser() try: cfg.read(os.path.join(project.get_ltlmop_root(), "global.cfg")) loggerLevel = cfg.get("logging", "level").lower() except: logging.warning("Could not parse global.cfg file; using defaults") loggerLevel = "info" if loggerLevel == 'error': logger.setLevel(logging.ERROR) elif loggerLevel == 'warning': logger.setLevel(logging.WARNING) elif loggerLevel == 'info': logger.setLevel(logging.INFO) elif loggerLevel == 'debug': logger.setLevel(logging.DEBUG)
def execute_main(listen_port=None, spec_file=None, aut_file=None, show_gui=False): logging.info("Hello. Let's do this!") # Create the XML-RPC server if listen_port is None: # Search for a port we can successfully bind to while True: listen_port = random.randint(10000, 65535) try: xmlrpc_server = SimpleXMLRPCServer(("127.0.0.1", listen_port), logRequests=False, allow_none=True) except socket.error as e: pass else: break else: xmlrpc_server = SimpleXMLRPCServer(("127.0.0.1", listen_port), logRequests=False, allow_none=True) # Create the execution context object e = LTLMoPExecutor() # Register functions with the XML-RPC server xmlrpc_server.register_instance(e) # Kick off the XML-RPC server thread XMLRPCServerThread = threading.Thread(target=xmlrpc_server.serve_forever) XMLRPCServerThread.daemon = True XMLRPCServerThread.start() logging.info("Executor listening for XML-RPC calls on http://127.0.0.1:{} ...".format(listen_port)) # Start the GUI if necessary if show_gui: # Create a subprocess logging.info("Starting GUI window...") p_gui = subprocess.Popen( ["python", "-u", os.path.join(project.get_ltlmop_root(), "lib", "simGUI.py"), str(listen_port)] ) # Wait for GUI to fully load, to make sure that # to make sure all messages are redirected e.externalEventTargetRegistered.wait() if spec_file is not None: # Tell executor to load spec & aut # if aut_file is None: # aut_file = spec_file.rpartition('.')[0] + ".aut" e.initialize(spec_file, aut_file, firstRun=True) # Start the executor's main loop in this thread e.run() # Clean up on exit logging.info("Waiting for XML-RPC server to shut down...") xmlrpc_server.shutdown() XMLRPCServerThread.join()
def setupLogging(loggerLevel=None): # Set up loggers for printing error messages class ColorLogFormatter(logging.Formatter): def __init__(self, *args, **kwds): super(ColorLogFormatter, self).__init__(*args, **kwds) self.plain_formatter = logging.Formatter(" [ %(module)s ] %(message)s") self.detailed_formatter = logging.Formatter(" --> [%(levelname)s] (%(pathname)s, line %(lineno)s): %(message)s") def colorize(self, level, string): if sys.platform in ['win32', 'cygwin']: # Message with color is not yet supported in Windows return string elif not hasattr(sys.stderr, "isatty") or not sys.stderr.isatty(): # Only try to colorize if outputting to a terminal return string else: colors = {'ERROR': 91, 'WARNING': 93, 'INFO': 97, 'DEBUG': 94} return "\033[{0}m{1}\033[0m".format(colors[level], string) def format(self, record): if record.levelname == "INFO": precolor = self.plain_formatter.format(record) else: precolor = self.detailed_formatter.format(record) return self.colorize(record.levelname, precolor) logger = logging.getLogger() h = logging.StreamHandler() f = ColorLogFormatter() h.setFormatter(f) logger.addHandler(h) cfg = ConfigParser.ConfigParser() try: cfg.read(os.path.join(project.get_ltlmop_root(), "global.cfg")) loggerLevel = cfg.get("logging", "level").lower() except: logging.warning("Could not parse global.cfg file; using defaults") loggerLevel = "info" if loggerLevel == 'error': logger.setLevel(logging.ERROR) elif loggerLevel == 'warning': logger.setLevel(logging.WARNING) elif loggerLevel == 'info': logger.setLevel(logging.INFO) elif loggerLevel == 'debug': logger.setLevel(logging.DEBUG)
def execute_main(listen_port=None, spec_file=None, aut_file=None, show_gui=False): logging.info("Hello. Let's do this!") # Create the XML-RPC server if listen_port is None: # Search for a port we can successfully bind to while True: listen_port = random.randint(10000, 65535) try: xmlrpc_server = SimpleXMLRPCServer(("127.0.0.1", listen_port), logRequests=False, allow_none=True) except socket.error as e: pass else: break else: xmlrpc_server = SimpleXMLRPCServer(("127.0.0.1", listen_port), logRequests=False, allow_none=True) # Create the execution context object e = LTLMoPExecutor() # Register functions with the XML-RPC server xmlrpc_server.register_instance(e) # Kick off the XML-RPC server thread XMLRPCServerThread = threading.Thread(target=xmlrpc_server.serve_forever) XMLRPCServerThread.daemon = True XMLRPCServerThread.start() logging.info( "Executor listening for XML-RPC calls on http://127.0.0.1:{} ...". format(listen_port)) # Start the GUI if necessary if show_gui: # Create a subprocess logging.info("Starting GUI window...") p_gui = subprocess.Popen([ "python", "-u", os.path.join(project.get_ltlmop_root(), "lib", "simGUI.py"), str(listen_port) ]) # Wait for GUI to fully load, to make sure that # to make sure all messages are redirected e.externalEventTargetRegistered.wait() if spec_file is not None: # Tell executor to load spec & aut #if aut_file is None: # aut_file = spec_file.rpartition('.')[0] + ".aut" e.initialize(spec_file, aut_file, firstRun=True) # Start the executor's main loop in this thread e.run() # Clean up on exit logging.info("Waiting for XML-RPC server to shut down...") xmlrpc_server.shutdown() XMLRPCServerThread.join()