与版本化字典的接口

时间:2008-10-02 14:38:44

标签: python

我有一个版本化的文档存储,我想通过类似接口的dict访问。 常见的用法是访问最新版本(get,set,del),但是也应该能够访问特定的版本(键总是str / unicode或int)。

from UserDict import DictMixin
class VDict(DictMixin):   
    def __getitem__(self, key):
        if isinstance(key, tuple):
            docid, rev = key
        else:
            docid = key
            rev = None  # set to tip rev

        print docid, rev
        # return ...

In [1]: d = VDict()

In [2]: d[2]
2 None

In [3]: d[2, 1]
2 1

这个解决方案有点棘手,我不确定它是否是一个干净,易懂的界面。我应该提供一个功能

def getrev(self, docid, rev):
   ...

代替?

1 个答案:

答案 0 :(得分:4)

是的,提供不同的API以获取不同的版本。用于检索特定修订版本的特定项目的单个方法调用,或者用于获取特定修订版本的“视图”的方法调用,然后您可以像普通字典一样访问它,具体取决于这样的“视图”是否会看多少用处。或者两者兼而有之,考虑到dict-view解决方案,无论如何都需要一些方法来获取特定修订版的项目:

class RevisionView(object):
    def __init__(self, db, revid):
        self.db = db
        self.revid = revid
    def __getitem__(self, item):
        self.db.getrev(item, self.revid)