def import_named_file(file):
  """ TODO: implement """
  file = Path(file)
  dir,name,ext = file.dir_base_ext(nodot=True)
  if dir in sys.path:
    #print dir
    pass
def import_named_file(file):
    """ TODO: implement """
    file = Path(file)
    dir, name, ext = file.dir_base_ext(nodot=True)
    if dir in sys.path:
        #print dir
        pass
 def __init__(self,**kwds):
   self.dir = Path(kwds["dir"])
   self.prefix = kwds["prefix"]
   self.ignore = kwds["ignore"]
   ##
   self._all = list()
   self._all_py = list()
   ##
   self._load()
class Multirun(object):
  
  def __init__(self,**kwds):
    self.dir = Path(kwds["dir"])
    self.prefix = kwds["prefix"]
    self.ignore = kwds["ignore"]
    ##
    self._all = list()
    self._all_py = list()
    ##
    self._load()
        
  def run(self,cmd):
    all_sorted = filter(lambda x: x.has_cmd(cmd),self._all)
    all_sorted.sort(lambda x,y:cmp(x.order(),y.order()))
    log.debug("running: %s %d/%d" % (cmd,len(all_sorted),len(self._all)))
    start_time = time.time()
    for part in all_sorted:
      succ = part.run(cmd)
      if not succ:
        log.error("%s: %s failed" % (cmd,part.file()))
    log.debug("used time %f" % (time.time() - start_time))

  def list(self):
    return self._all
      
  def list_files(self):
    rl = list()
    for part in self._all:
      rl.append(part.file())
    return rl

  def _load(self):
    for name in self.dir.list():
      if self.is_ignorable(name):
        continue
      if not self.is_wanted(name):
        continue
      ##
      file = self.dir/name
      name,ext = file.base_ext(nodot=True)
      np = name.split('-')
      part = None
      if len(np) == 5: # with command
        if ext == 'py' and np[4] == 'mod':
          part = PyPart()
          self._all_py.append(part)
        else:
          part = CmdPart()
          part.command(np[4])          
        part.order(int(np[1]))
        part.context(np[2])
        part.subject(np[3])
      elif len(np) == 4: # no specific command
        part = InitPart()
        part.order(int(np[1]))
        part.context(np[2])
        part.subject(np[3])
      else: # error
        raise SyntaxError("error in %s" % name)        
      part.file(file)
      self._all.append(part)        
    ##
    self._load_mods()
    
  def _load_mods(self):
    for pypart in self._all_py:
      pypart.load()
                
  def is_ignorable(self,name):
    for ignore_glob in self.ignore:
      #print ignore_glob
      if fnm.fnmatch(name,ignore_glob):
        log.debug("ignoring %s",name)
        return True
    return False
    
  def is_wanted(self,name):
    if name.startswith(self.prefix):
      return True
    return False