Example #1
0
    class __TaskManager(EventHandler):
        def __init__(self):
            EventHandler.__init__(self)
            self.loader = loader.loader()
            self.processusManager = ProcessusManager()
            self.VFS = VFS.Get()
            self.VFS.connection(self)
            self.ppModules = ModulesConfig()
            self.ppAnalyses = ModulesConfig()

        def addAnalyseDependencies(self):
            requiered = set()
            for moduleName in self.ppAnalyses:
                try:
                    for module in self.loader.modules[moduleName].depends:
                        requiered.add(module)
                except AttributeError:
                    pass
            for moduleName in requiered:
                try:
                    self.loader.modules[moduleName]
                    self.ppModules.add(moduleName)
                except KeyError:
                    try:
                        modules = self.loader.tags[moduleName]
                        for moduleName in modules:
                            self.ppModules.add(moduleName)
                    except KeyError:
                        pass

        def moduleInstancesByName(self, name):
            instances = []
            for proc in self.processusManager:
                if proc.name == name:
                    instances.append(proc)
            return instances

        def processusByName(self, name):
            processus = []
            for proc in self.processusManager:
                if proc.name == name:
                    processus.append(proc)
            return processus

        def clearPostProcess(self):
            self.ppModules.clear()
            self.ppAnalyses.clear()

        def Event(self, e):
            if len(self.ppModules) and e != None and e.value != None:
                node = e.value.value()
                if node and not isinstance(node, VLink):
                    ppsched.enqueueRegister(node)

        def postProcessWalk(self, node):
            job = (self.postProcess, (node, ))
            ppsched.enqueueProcessing(job)
            if node.hasChildren():
                childrens = node.children()
                for child in childrens:
                    self.postProcessWalk(child)

        def postProcess(self, node, recursive=False):
            try:
                compatModule = node.compatibleModules()
                for mod in self.ppModules:
                    moduleObj = self.loader.modules[mod]
                    if (node.isCompatibleModule(mod)) or ("generic"
                                                          in moduleObj.flags):
                        (args, exec_flags) = self.ppModules[mod]
                        nodeName = moduleObj.conf.argumentsByType(
                            typeId.Node)[0].name()
                        if args == None:
                            args = {}
                        if exec_flags == None:
                            exec_flags = ["console", "thread"]
                        else:
                            if not ("gui" in exec_flags
                                    or "console" in exec_flags):
                                exec_flags.append("console")
                            if not "thread" in exec_flags:
                                exec_flags.append("thread")
                        args[nodeName] = node
                        arg = moduleObj.conf.generate(args)
                        if not self.processusManager.exist(moduleObj, arg):
                            ppsched.enqueueProcessus(
                                (self.add, (mod, arg, exec_flags, True)))
            except:
                err_type, err_value, err_traceback = sys.exc_info()
                for l in traceback.format_exception_only(err_type, err_value):
                    print l
                for l in traceback.format_tb(err_traceback):
                    print l

        def postProcessAnalyse(self, root):
            for mod in self.ppAnalyses:
                (args, exec_flags) = self.ppAnalyses[mod]
                moduleObj = self.loader.modules[mod]
                nodeName = moduleObj.conf.argumentsByType(typeId.Node)
                if args == None:
                    args = {}
                if exec_flags == None:
                    exec_flags = ["gui", "thread"]
                else:
                    if not "thread" in exec_flags:
                        exec_flags.append("thread")
                    if not ("gui" in exec_flags) and ("gui"
                                                      in moduleObj.flags):
                        exec_flags.append("gui")
                try:
                    if nodeName:
                        args[nodeName[0].name()] = root
                    arg = moduleObj.conf.generate(args)
                    ppsched.enqueueAnalyse(
                        (self.add, (mod, arg, exec_flags, True)))
                except RuntimeError:
                    pass

        def add(self, cmd, args, exec_flags, enqueued=False):
            mod = self.loader.modules[cmd]
            proc = None
            if "single" in mod.flags:
                proc = self.processusManager.singleCreate(
                    mod, None, exec_flags)
            else:
                proc = self.processusManager.create(mod, None, exec_flags)
            if not "thread" in exec_flags:
                try:
                    if "gui" in proc.mod.flags and not "console" in proc.mod.flags:
                        print "This script is gui only"
                        self.processusManager.remove(proc)
                        proc.event.set()
                        return proc
                except AttributeError:
                    pass
            if enqueued:
                proc.launch(args)
            else:
                sched.enqueue(((proc.launch, args), ))
            return proc
Example #2
0
  class __TaskManager(EventHandler):
    def __init__(self):
      EventHandler.__init__(self)
      self.loader = loader.loader()
      self.processusManager = ProcessusManager()
      self.VFS = VFS.Get()
      self.VFS.connection(self)
      self.ppModules = ModulesConfig()
      self.ppAnalyses = ModulesConfig()

    def addAnalyseDependencies(self):
       requiered = set() 
       for moduleName in self.ppAnalyses:
	  try:
            for module in self.loader.modules[moduleName].depends:
	      requiered.add(module)
	  except AttributeError:
	    pass
       for moduleName in requiered:
          try:
	     self.loader.modules[moduleName]
             self.ppModules.add(moduleName)
          except KeyError:
	    try:  
	      modules = self.loader.tags[moduleName]
	      for moduleName in modules:
		 self.ppModules.add(moduleName)
	    except KeyError:
		pass

    def moduleInstancesByName(self, name):
       instances = []
       for proc in self.processusManager:
          if proc.name == name:
            instances.append(proc)
       return instances   

    def processusByName(self, name):
       processus = []
       for proc in self.processusManager:
	 if proc.name == name:
           processus.append(proc)
       return processus

    def clearPostProcess(self):
        self.ppModules.clear()
	self.ppAnalyses.clear()

    def Event(self, e):
      if len(self.ppModules) and e != None and e.value != None:
        node = e.value.value()
        if node and not isinstance(node, VLink):
  	  ppsched.enqueueRegister(node)

    def postProcessWalk(self, node):
       job = (self.postProcess, (node,))
       ppsched.enqueueProcessing(job)	 	
       if node.hasChildren():
	 childrens = node.children()
	 for child in childrens:
	     self.postProcessWalk(child)

    def postProcess(self, node, recursive = False):
     try:
      compatModule = node.compatibleModules()
      for mod in self.ppModules:
         moduleObj = self.loader.modules[mod]
         if (node.isCompatibleModule(mod)) or ("generic" in moduleObj.flags):
	   (args, exec_flags) = self.ppModules[mod]
 	   nodeName = moduleObj.conf.argumentsByType(typeId.Node)[0].name()
           if args == None:
             args = {}
           if exec_flags == None:
             exec_flags = ["console", "thread"]
	   else:
              if not ("gui" in exec_flags or "console" in exec_flags):
	        exec_flags.append("console")
              if not "thread" in exec_flags:
	        exec_flags.append("thread")
           args[nodeName] = node
           arg = moduleObj.conf.generate(args)
	   if not self.processusManager.exist(moduleObj, arg):
             ppsched.enqueueProcessus((self.add, (mod, arg, exec_flags, True)))
     except:
	err_type, err_value, err_traceback = sys.exc_info()
        for l in  traceback.format_exception_only(err_type, err_value):
	  print l
        for l in  traceback.format_tb(err_traceback):
	   print l
  
    def postProcessAnalyse(self, root): 
       for mod in self.ppAnalyses:
          (args, exec_flags) =  self.ppAnalyses[mod] 
	  moduleObj = self.loader.modules[mod]
 	  nodeName = moduleObj.conf.argumentsByType(typeId.Node)
          if args == None:
           args = {}
          if exec_flags == None:
           exec_flags = ["gui", "thread"]
          else:
	    if not "thread" in exec_flags:
	      exec_flags.append("thread")
            if not ("gui" in exec_flags) and ("gui" in moduleObj.flags):
	      exec_flags.append("gui")
	  try :
	   if nodeName:
	      args[nodeName[0].name()] = root 
           arg = moduleObj.conf.generate(args)
	   ppsched.enqueueAnalyse((self.add, (mod, arg, exec_flags, True)))
	  except RuntimeError:
	    pass 

    def add(self, cmd, args, exec_flags, enqueued = False):
      mod = self.loader.modules[cmd] 
      proc = None
      if "single" in mod.flags:
         proc = self.processusManager.singleCreate(mod, None, exec_flags)
      else:
	proc = self.processusManager.create(mod, None, exec_flags)
      if not "thread" in exec_flags:
        try :
          if "gui" in proc.mod.flags and not "console" in proc.mod.flags:
            print "This script is gui only"
	    self.processusManager.remove(proc)
	    proc.event.set()
	    return proc
        except AttributeError:
	    pass
      if enqueued:
	 proc.launch(args)
      else:
	 sched.enqueue(((proc.launch, args),) )
      return proc