Przeglądaj źródła

Implemented Repository.list()

Jonas Borgström 11 lat temu
rodzic
commit
0d248192e5
3 zmienionych plików z 22 dodań i 1 usunięć
  1. 3 0
      attic/remote.py
  2. 6 1
      attic/repository.py
  3. 13 0
      attic/testsuite/repository.py

+ 3 - 0
attic/remote.py

@@ -194,6 +194,9 @@ class RemoteRepository(object):
     def __len__(self):
         return self.call('__len__')
 
+    def list(self, limit=None, marker=None):
+        return self.call('list', limit, marker)
+
     def get(self, id_):
         for resp in self.get_many([id_]):
             return resp

+ 6 - 1
attic/repository.py

@@ -1,8 +1,8 @@
 from configparser import RawConfigParser
 from binascii import hexlify
+from itertools import islice
 import errno
 import os
-import re
 import shutil
 import struct
 import sys
@@ -292,6 +292,11 @@ class Repository(object):
             self.index = self.get_read_only_index(self.get_transaction_id())
         return len(self.index)
 
+    def list(self, limit=None, marker=None):
+        if not self.index:
+            self.index = self.get_read_only_index(self.get_transaction_id())
+        return [id_ for id_, _ in islice(self.index.iteritems(marker=marker), limit)]
+
     def get(self, id_):
         if not self.index:
             self.index = self.get_read_only_index(self.get_transaction_id())

+ 13 - 0
attic/testsuite/repository.py

@@ -87,6 +87,19 @@ class RepositoryTestCase(AtticTestCase):
         self.repository.delete(b'00000000000000000000000000000000')
         self.repository.commit()
 
+    def test_list(self):
+        for x in range(100):
+            self.repository.put(('%-32d' % x).encode('ascii'), b'SOMEDATA')
+        all = self.repository.list()
+        self.assert_equal(len(all), 100)
+        first_half = self.repository.list(limit=50)
+        self.assert_equal(len(first_half), 50)
+        self.assert_equal(first_half, all[:50])
+        second_half = self.repository.list(marker=first_half[-1])
+        self.assert_equal(len(second_half), 50)
+        self.assert_equal(second_half, all[50:])
+        self.assert_equal(len(self.repository.list(limit=50)), 50)
+
 
 class RepositoryCheckTestCase(AtticTestCase):