From 0d248192e588a6eee67ef6f30dde8bf078c77097 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Borgstr=C3=B6m?= Date: Mon, 10 Feb 2014 21:51:25 +0100 Subject: [PATCH] Implemented Repository.list() --- attic/remote.py | 3 +++ attic/repository.py | 7 ++++++- attic/testsuite/repository.py | 13 +++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/attic/remote.py b/attic/remote.py index 0c98e21d7..033fdba7a 100644 --- a/attic/remote.py +++ b/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 diff --git a/attic/repository.py b/attic/repository.py index 98a688032..e171a20f5 100644 --- a/attic/repository.py +++ b/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()) diff --git a/attic/testsuite/repository.py b/attic/testsuite/repository.py index 3cf5ff410..c59761322 100644 --- a/attic/testsuite/repository.py +++ b/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):