فهرست منبع

hashindex: inherit from MutableMapping, implement __iter__

Thomas Waldmann 7 ماه پیش
والد
کامیت
742fe74132
1فایلهای تغییر یافته به همراه14 افزوده شده و 18 حذف شده
  1. 14 18
      src/borg/hashindex.pyx

+ 14 - 18
src/borg/hashindex.pyx

@@ -1,3 +1,4 @@
+from collections.abc import MutableMapping
 from collections import namedtuple
 import os
 import struct
@@ -12,7 +13,7 @@ cdef _NoDefault = object()
 ChunkIndexEntry = namedtuple('ChunkIndexEntry', 'refcount size')
 
 
-class ChunkIndex:
+class ChunkIndex(MutableMapping):
     """
     Mapping from key256 to (refcount32, size32) to track chunks in the repository.
     """
@@ -43,12 +44,13 @@ class ChunkIndex:
     def __len__(self):
         return len(self.ht)
 
+    def __iter__(self):
+        for key, value in self.ht.items():
+            yield key
+
     def iteritems(self):
         yield from self.ht.items()
 
-    def get(self, key, default=None):
-        return self.ht.get(key, default)
-
     def add(self, key, refs, size):
         v = self.get(key, ChunkIndexEntry(0, 0))
         refcount = min(self.MAX_VALUE, v.refcount + refs)
@@ -71,7 +73,7 @@ class ChunkIndex:
 FuseVersionsIndexEntry = namedtuple('FuseVersionsIndexEntry', 'version hash')
 
 
-class FuseVersionsIndex:
+class FuseVersionsIndex(MutableMapping):
     """
     Mapping from key128 to (file_version32, file_content_hash128) to support the FUSE versions view.
     """
@@ -93,14 +95,15 @@ class FuseVersionsIndex:
     def __len__(self):
         return len(self.ht)
 
-    def get(self, key, default=None):
-        return self.ht.get(key, default)
+    def __iter__(self):
+        for key, value in self.ht.items():
+            yield key
 
 
 NSIndex1Entry = namedtuple('NSIndex1Entry', 'segment offset')
 
 
-class NSIndex1:
+class NSIndex1(MutableMapping):
     """
     Mapping from key256 to (segment32, offset32), as used by legacy repo index of borg 1.x.
     """
@@ -133,16 +136,9 @@ class NSIndex1:
     def __len__(self):
         return len(self.ht)
 
-    def get(self, key, default=None):
-        return self.ht.get(key, default)
-
-    def pop(self, key, default=_NoDefault):
-        try:
-            return self.ht.pop(key)
-        except KeyError:
-            if default is _NoDefault:
-                raise
-            return default
+    def __iter__(self):
+        for key, value in self.ht.items():
+            yield key
 
     def iteritems(self, marker=None):
         do_yield = marker is None