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)
示例#3
0
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()
示例#4
0
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)
示例#5
0
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()