def from_mrfile(cls, mrfile, nims_path, archived=True): series_uid = nimsutil.pack_dicom_uid(mrfile.series_uid) dataset = (cls.query.join(Epoch) .filter(Epoch.uid == series_uid) .filter(Epoch.acq == mrfile.acq_no) .filter(cls.filetype == mrfile.filetype) .first()) if not dataset: alt_dataset = (cls.query.join(Epoch) .filter(Epoch.uid == series_uid) .filter(Epoch.acq == mrfile.acq_no) .filter(cls.kind == u'primary') .first()) if not alt_dataset: kind = u'primary' elif alt_dataset.priority < mrfile.priority: kind = u'primary' alt_dataset.kind = u'secondary' else: kind = u'secondary' epoch = Epoch.from_mrfile(mrfile) dataset = cls( container=epoch, priority = mrfile.priority, filetype=mrfile.filetype, compressed=mrfile.compressed, kind=kind, label=cls.default_labels[mrfile.filetype], archived=archived, ) transaction.commit() DBSession.add(dataset) nimsutil.make_joined_path(nims_path, dataset.relpath) return dataset
def from_metadata(cls, md): dataset = ( cls.query.join(Epoch) .filter(Epoch.uid == md.series_uid) .filter(Epoch.acq == md.acq_no) .with_lockmode("update") .first() ) if not dataset: epoch = Epoch.from_metadata(md) dataset = cls(container=epoch, datatype=md.datatype, kind=u"primary", archived=True) transaction.commit() DBSession.add(dataset) return dataset
def latest_exp_session(self, min_access_level=u'Anon-Read'): query = DBSession.query(Experiment, Session).join(Subject, Experiment.subjects).join(Session, Subject.sessions) if not self.is_superuser: query = self._filter_access(query, min_access_level) if self.trash_flag == 0: query = query.filter(Session.trashtime == None) elif self.trash_flag == 2: query = query.filter(Session.trashtime != None) return query.order_by(Session.timestamp.desc()).first() or (None, None)
def dataset_cnt(self): query = DBSession.query(Session) if not self.is_superuser: query = ( query.join(Subject, Session.subject) .join(Experiment, Subject.experiment) .join(Access) .filter(Access.user == self) ) return query.count()
def from_mrfile(cls, mrfile, nims_path, archived=True): series_uid = nimsutil.pack_dicom_uid(mrfile.series_uid) dataset = (cls.query.join(Epoch) .filter(Epoch.uid == series_uid) .filter(Epoch.acq == mrfile.acq_no) .filter(cls.filetype == mrfile.filetype) .first()) if not dataset: alt_dataset = (cls.query.join(Epoch) .filter(Epoch.uid == series_uid) .filter(Epoch.acq == mrfile.acq_no) .filter(cls.kind == u'primary') .first()) if not alt_dataset: kind = u'primary' elif alt_dataset.priority < mrfile.priority: kind = u'primary' alt_dataset.kind = u'secondary' alt_dataset.container.qa_status = u'rerun' else: kind = u'secondary' epoch = Epoch.from_mrfile(mrfile) dataset = cls( container=epoch, priority = mrfile.priority, filetype=mrfile.filetype, compressed=mrfile.compressed, kind=kind, label=cls.default_labels[mrfile.filetype], archived=archived, qa_status=u'pending', ) transaction.commit() DBSession.add(dataset) nimsutil.make_joined_path(nims_path, dataset.relpath) return dataset
def setUp(self): """Prepare model test fixture.""" try: new_attrs = {} new_attrs.update(self.attrs) new_attrs.update(self.do_get_dependencies()) self.obj = self.klass(**new_attrs) DBSession.add(self.obj) DBSession.flush() return self.obj except: DBSession.rollback() raise
def at_path(cls, nims_path, filetype, label=None, archived=False): dataset = cls(filetype=filetype, label=(label if label else cls.default_labels[filetype]), archived=archived) transaction.commit() DBSession.add(dataset) nimsutil.make_joined_path(nims_path, dataset.relpath) return dataset
def experiment(self): return DBSession.query(Session, Experiment).join(Subject, Session.subject).join(Experiment, Subject.experiment).filter(Session.id == self.id).one().Experiment
def dataset_cnt(self): query = DBSession.query(Session) if not self.is_superuser: query = query.join(Subject, Session.subject).join(Experiment, Subject.experiment).join(Access).filter(Access.user==self) return query.count()
def test_query_obj(self): """Model objects can be queried""" obj = DBSession.query(self.klass).one() for key, value in self.attrs.iteritems(): assert_equals(getattr(obj, key), value)
def tearDown(self): """Finish model test fixture.""" DBSession.rollback()
def at_path(cls, nims_path, filename=None, datatype=None, archived=False): dataset = cls(datatype=datatype, archived=archived) transaction.commit() DBSession.add(dataset) nimsutil.make_joined_path(nims_path, dataset.relpath) return dataset