__init__.py 文件源码

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

项目:lemongraph 作者: NationalSecurityAgency 项目源码 文件源码
def updates(self, **kwargs):
        """returns iterator for tuples of: node/edge before modification, node/edge after modification, the set of key names that changed, first and last txn ID to contribute to the delta, and the last logID processed"""
        changed = {}
        batch=kwargs.pop('batch', 500)
        for target in self.scan(**kwargs):
            ID = target.ID
            updated = []
            if isinstance(target, Property):
                # it is a property
                updated.append((target.parent, set([target.key])))
            else:
                updated.append((target, set(target)))
                # new edges cause changes in referenced nodes' properties
                if isinstance(target,Edge):
                    updated.append((target.src, Node.reserved_src_updates))
                    updated.append((target.tgt, Node.reserved_tgt_updates))

            for (obj, keys) in updated:
                if obj.ID in changed:
                    # updated record w/ latest revision of node/edge, and merge in affected key names
                    changed[obj.ID][1] = obj
                    changed[obj.ID][2].update(keys)
                    changed[obj.ID][4] = ID
                else:
                    # collect changes for up to $batch node/edges before yielding change sets
                    if len(changed) == batch:
                        for before_after_keys in changed.itervalues():
                            before_after_keys.append(ID)
                            yield tuple(before_after_keys)
                        changed.clear()
                    # snag copy of the object just before this update (might not exist yet), this object, and affected keys
                    changed[obj.ID] = [obj.clone(beforeID=ID), obj, set(keys), ID, ID]
        for before_after_keys in changed.itervalues():
            before_after_keys.append(ID)
            yield tuple(before_after_keys)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号