models.py 文件源码

python
阅读 30 收藏 0 点赞 0 评论 0

项目:stream2segment 作者: rizac 项目源码 文件源码
def edit_classes(self, *ids_or_labels, mode, auto_commit=True, annotator=None):
        """:param mode: either 'add' 'set' or 'del'"""
        sess = object_session(self)
        needs_commit = False
        ids = set(ids_or_labels)
        labels = set(_ for _ in ids if type(_) in (bytes, str))
        ids -= labels
        if mode == 'set':
            self.classes[:] = []
        else:
            classes = list(self.classes)

        if mode == 'del':
            for c in classes:
                if c.id in ids or c.label in labels:
                    self.classes.remove(c)
                    needs_commit = True
            ids = labels = set()  # do not add anything
        elif mode == 'add':
            for c in classes:
                if c.id in ids:
                    ids.remove(c.id)  # already set, remove it and don't add it again
                if c.label in labels:
                    labels.remove(c.label)  # already set, remove it and don't add it again
        elif mode != 'set':
            raise TypeError("`mode` argument needs to be in ('add', 'del', 'set'), "
                            "'%s' supplied" % str(mode))

        if ids or labels:
            flt1 = None if not ids else Class.id.in_(ids)  # filter on ids, or None
            flt2 = None if not labels else Class.label.in_(labels)  # filter on labels, or None
            flt = flt1 if flt2 is None else flt2 if flt1 is None else (flt1 | flt2)
            classids2add = [_[0] for _ in sess.query(Class.id).filter(flt)]
            if classids2add:
                needs_commit = True
                sess.add_all((ClassLabelling(class_id=cid,
                                             segment_id=self.id, annotator=annotator,
                                             is_hand_labelled=annotator or False)
                              for cid in classids2add))

        if needs_commit and auto_commit:
            try:
                sess.commit()
            except SQLAlchemyError as _:
                sess.rollback()
                raise
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号