与版本字典的接口

时间:2020-03-06 15:01:47  来源:igfitidea点击:

我有一个版本化的文档存储,我想通过类似界面的字典来访问它。
常见用法是访问最新修订版(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):
   ...

反而?

解决方案

是的,提供不同的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)