Пример #1
0
class Core(object):

  def __init__(self, host=None, user=None, passwd=None, group=None,
               keep_tokens=1, study_label=None, logger=None):
    self.kb = KB(driver='omero')(host, user, passwd, group, keep_tokens)
    self.logger = logger if logger else logging.getLogger()
    self.record_counter = 0
    self.default_study = None
    if study_label:
      s = self.kb.get_study(study_label)
      if not s:
        raise ValueError('No known study with label %s' % study_label)
      self.logger.info('Selecting %s[%d,%s] as default study' %
                       (s.label, s.omero_id, s.id))
      self.default_study = s

  @classmethod
  def find_action_setup_conf(klass, args):
    action_setup_conf = {}
    for x in dir(args):
      if not (x.startswith('_') or x.startswith('func')):
        action_setup_conf[x] = getattr(args, x)
    # HACKS
    action_setup_conf['ifile'] = action_setup_conf['ifile'].name
    action_setup_conf['ofile'] = action_setup_conf['ofile'].name
    action_setup_conf['report_file'] = action_setup_conf['report_file'].name
    return action_setup_conf

  @classmethod
  def get_action_setup_options(klass, record, action_setup_conf = None,
                               object_history = None):
    options = {}
    if 'options' in record and record['options']:
      kvs = record['options'].split(',')
      for kv in kvs:
        k, v = kv.split('=')
        options[k] = v
    if action_setup_conf:
      options['importer_setup'] = action_setup_conf
    if object_history:
      options['object_history'] = object_history
    return json.dumps(options)

  def get_device(self, label, maker, model, release):
    device = self.kb.get_device(label)
    if not device:
      self.logger.debug('creating a device')
      device = self.kb.create_device(label, maker, model, release)
    return device

  def get_action_setup(self, label, conf):
    """
    Return the ActionSetup corresponding to label if there is one,
    else create a new one using conf.
    """
    asetup = self.kb.get_action_setup(label)
    if not asetup:
      kb_conf = {
        'label': label,
        'conf': json.dumps(conf),
        }
      asetup = self.kb.factory.create(self.kb.ActionSetup, kb_conf).save()
    return asetup

  def get_study(self, label):
    if self.default_study:
      return self.default_study
    study = self.kb.get_study(label)
    if not study:
      study = self.kb.factory.create(self.kb.Study, {'label': label}).save()
    return study

  def find_study(self, records):
    study_label = records[0]['study']
    for r in records:
      if r['study'] != study_label:
        m = 'all records should have the same study label'
        self.logger.critical(m)
        raise ValueError(m)
    return self.get_study(study_label)

  def find_klass(self, col_name, records):
    o_type = records[0][col_name]
    for r in records:
      if r[col_name] != o_type:
        m = 'all records should have the same %s' % col_name
        self.logger.critical(m)
        raise ValueError(m)
    return getattr(self.kb, o_type)

  def __preload_items__(self, key_field, klass, preloaded):
    objs = self.kb.get_objects(klass)
    for o in objs:
      assert not getattr(o, key_field) in preloaded
      preloaded[getattr(o, key_field)] = o

  def preload_by_type(self, name, klass, preloaded):
    self.logger.info('start preloading %s' % name)
    self.__preload_items__('id', klass, preloaded)
    self.logger.info('done preloading %s' % name)

  def preload_studies(self, preloaded):
    self.logger.info('start preloading studies')
    self.__preload_items__('label', self.kb.Study, preloaded)
    self.logger.info('done preloading studies')

  def missing_fields(self, fields, r):
    for f in fields:
      if f not in r:
        return f
    return False
Пример #2
0
class Core(object):
    def __init__(self,
                 host=None,
                 user=None,
                 passwd=None,
                 group=None,
                 keep_tokens=1,
                 study_label=None,
                 logger=None):
        self.kb = KB(driver='omero')(host, user, passwd, group, keep_tokens)
        self.logger = logger if logger else logging.getLogger()
        self.record_counter = 0
        self.default_study = None
        if study_label:
            s = self.kb.get_study(study_label)
            if not s:
                raise ValueError('No known study with label %s' % study_label)
            self.logger.info('Selecting %s[%d,%s] as default study' %
                             (s.label, s.omero_id, s.id))
            self.default_study = s

    @classmethod
    def find_action_setup_conf(klass, args):
        action_setup_conf = {}
        for x in dir(args):
            if not (x.startswith('_') or x.startswith('func')):
                action_setup_conf[x] = getattr(args, x)
        # HACKS
        action_setup_conf['ifile'] = action_setup_conf['ifile'].name
        action_setup_conf['ofile'] = action_setup_conf['ofile'].name
        action_setup_conf['report_file'] = action_setup_conf[
            'report_file'].name
        return action_setup_conf

    @classmethod
    def get_action_setup_options(klass,
                                 record,
                                 action_setup_conf=None,
                                 object_history=None):
        options = {}
        if 'options' in record and record['options']:
            kvs = record['options'].split(',')
            for kv in kvs:
                k, v = kv.split('=')
                options[k] = v
        if action_setup_conf:
            options['importer_setup'] = action_setup_conf
        if object_history:
            options['object_history'] = object_history
        return json.dumps(options)

    def get_device(self, label, maker, model, release):
        device = self.kb.get_device(label)
        if not device:
            self.logger.debug('creating a device')
            device = self.kb.create_device(label, maker, model, release)
        return device

    def get_action_setup(self, label, conf):
        """
    Return the ActionSetup corresponding to label if there is one,
    else create a new one using conf.
    """
        asetup = self.kb.get_action_setup(label)
        if not asetup:
            kb_conf = {
                'label': label,
                'conf': json.dumps(conf),
            }
            asetup = self.kb.factory.create(self.kb.ActionSetup,
                                            kb_conf).save()
        return asetup

    def get_study(self, label):
        if self.default_study:
            return self.default_study
        study = self.kb.get_study(label)
        if not study:
            study = self.kb.factory.create(self.kb.Study, {
                'label': label
            }).save()
        return study

    def find_study(self, records):
        study_label = records[0]['study']
        for r in records:
            if r['study'] != study_label:
                m = 'all records should have the same study label'
                self.logger.critical(m)
                raise ValueError(m)
        return self.get_study(study_label)

    def find_klass(self, col_name, records):
        o_type = records[0][col_name]
        for r in records:
            if r[col_name] != o_type:
                m = 'all records should have the same %s' % col_name
                self.logger.critical(m)
                raise ValueError(m)
        return getattr(self.kb, o_type)

    def __preload_items__(self, key_field, klass, preloaded):
        objs = self.kb.get_objects(klass)
        for o in objs:
            assert not getattr(o, key_field) in preloaded
            preloaded[getattr(o, key_field)] = o

    def preload_by_type(self, name, klass, preloaded):
        self.logger.info('start preloading %s' % name)
        self.__preload_items__('id', klass, preloaded)
        self.logger.info('done preloading %s' % name)

    def preload_studies(self, preloaded):
        self.logger.info('start preloading studies')
        self.__preload_items__('label', self.kb.Study, preloaded)
        self.logger.info('done preloading studies')

    def missing_fields(self, fields, r):
        for f in fields:
            if f not in r:
                return f
        return False