2008-10-02 19 views
1

我有一個版本化的文檔商店,我想通過字典接口訪問。 常見用法是訪問最新版本(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): 
    ... 

改爲?

+0

萬一有人來到這裏尋找一個版本的字典 - 我上傳一個工作版本的github早些時候周:github.com/jsbueno/extradict - 和上傳的「extradict」到pypi(關於這個問題,我使用.get與命名的版本參數能夠檢索舊的屬性版本) – jsbueno 2016-05-27 06:02:32

回答

4

是的,提供不同的API來獲取不同的版本。無論是單個方法調用某個特定修訂版本的某個特定項目,還是調用特定修訂版本的「視圖」的方法調用,然後您可以像普通字典一樣訪問,具體取決於這種「視圖」是否會看到很多用途。或兩者兼而有之,考慮到字典視圖解決方案將需要一些方法反正獲得特定版本的產品:

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