예제 #1
0
    def fetchApp(self, prefix, hdf):
        _app = app.App(str(self.taskid))
        doc = _app.load_yaml()

        hdf.setValue(prefix + "." + "package", _app.package)

        for key, val in doc.items():
            if val is not None:
                hdf.setValue(prefix + "." + key, val)
            else:
                hdf.setValue(prefix + "." + key, '')
예제 #2
0
    def start_task(self, req):
        a = app.App(req.taskid)
        a.load()

        pgroup = None
        runner = self._taskGroups.get(a.provides, None)
        if runner:
            if runner.task.taskid == req.taskid:
                print "already running"
                return StartTaskResponse("already running")

            self._stopTask(runner)

        if a.depends:
            pgroup = self._taskGroups.get(a.depends, None)
            if not pgroup:
                print "no parent task group %s running." % str(a.depends)
                return StartTaskResponse("no parent task group %s running." %
                                         str(a.depends))

        runner = AppRunner(req.taskid, self)
        runner.app = a
        self._apps[req.taskid] = runner

        if a.provides:
            self._taskGroups[a.provides] = runner

        if pgroup:
            pgroup.childGroups.append(runner)

        #print "startTask [%s, %s, %s]" % (req.taskid, a.name, req.username)
        runner.task.taskid = req.taskid
        runner.task.username = req.username
        runner.task.started = rospy.get_rostime()
        runner.task.status = "starting"

        #    self.app_update.publish(runner.task)
        self._send_status()

        runner.launch()

        runner.task.status = "running"
        #    self.app_update.publish(runner.task)
        self._send_status()

        return StartTaskResponse("done")
예제 #3
0
    def Action_Favorites(self, hdf):
        taskid = hdf.getValue("Query.taskid", "")
        doc = app.App(taskid).load_yaml()

        prefix = "CGI.cur.app"
        hdf.setValue(prefix + "." + "taskid", taskid)

        # for favorite apps
        user_record = self.authdb.users.lookup(self.username)
        if hdf.getValue("Query.set_favorite", "") == "1":
            user_record.add_favorite_app(taskid)
        elif hdf.getValue("Query.set_favorite", "") == "0":
            user_record.remove_favorite_app(taskid)

        if user_record.is_favorite_app(taskid):
            hdf.setValue("CGI.cur.favorite", "1")

        hdf.setValue("Content", "appinfo_favorites.cs")
예제 #4
0
    def display(self, hdf):
        webutil.set_tabs(hdf, ["apps", "appinfo"])
        webutil.grabTopics(hdf, [])
        taskid = hdf.getValue("Query.taskid", "")
        doc = app.App(taskid).load_yaml()

        prefix = "CGI.cur.app"
        hdf.setValue(prefix + "." + "taskid", taskid)
        for key, val in doc.items():
            if type(val) is list:
                for i in range(0, len(val)):
                    hdf.setValue(prefix + "." + key + "." + str(i), val[i])
            elif val is not None:
                hdf.setValue(prefix + "." + key, val)
            else:
                hdf.setValue(prefix + "." + key, '')

        # for favorite apps
        user_record = self.authdb.users.lookup(self.username)
        hdf.setValue("CGI.cur.user.favorite_apps", user_record.favorite_apps)

        if user_record.is_favorite_app(taskid):
            hdf.setValue("CGI.cur.app.favorite", "1")
예제 #5
0
    def start_task(self, req):
        a = app.App(req.taskid)
        a.load()

        # Check for conflicts between this task's provides and those of
        # running tasks.
        pgroup = None
        uncovered, pgroup = self._find_providers(a.provides)
        for runner in pgroup:
            if runner.task.taskid == req.taskid:
                print "already running"
                self._send_status()
                return StartTaskResponse("This app is already running.")

            if self.kill_on_conflict:
                self._stopTask(runner)
            else:
                return StartTaskResponse(
                    "The %s app conflicts with the %s app; please stop the %s app"
                    % (a.name, runner.app.name, runner.app.name))

        # Check for satisfaction of this task's dependencies.
        if a.depends:
            uncovered, pgroup = self._find_providers(a.depends)
            if uncovered:
                print "no parent task group %s running" % str(uncovered)
                self._send_status()
                return StartTaskResponse(
                    "No app that provides %s is running." % str(uncovered))

        runner = AppRunner(req.taskid, self)
        runner.app = a
        self._apps[req.taskid] = runner

        if a.provides:
            self._taskGroups[a.provides] = runner

        if pgroup:
            for p in pgroup:
                p.childGroups.append(runner)

        #print "startTask [%s, %s, %s]" % (req.taskid, a.name, req.username)
        runner.task.taskid = req.taskid
        runner.task.username = req.username
        runner.task.started = rospy.get_rostime()
        runner.task.status = "starting"

        #    self.app_update.publish(runner.task)
        self._send_status()

        try:
            runner.launch()
        except Exception as e:
            import traceback
            traceback.print_exc()
            runner.task.status = "error"
            self._send_status()

            self.runner = None
            self._stopTask(runner)
            return StartTaskResponse(
                "Exception while trying to launch the %s app: \"%s\"" %
                (req.taskid, e))

        runner.task.status = "running"
        #    self.app_update.publish(runner.task)
        self._send_status()

        return StartTaskResponse("done")