summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2015-08-02 18:02:02 +0300
committerLars Wirzenius <liw@liw.fi>2015-08-02 18:44:02 +0300
commit6ab9df99f78ee878da9cc376c89dc120c7748d0b (patch)
tree2518f29d883bea1c85fa1f9e308e3085cd2048ac
parent5b0c45e2393d01fe72b761b9a211b162ee004f1b (diff)
downloadobnam-6ab9df99f78ee878da9cc376c89dc120c7748d0b.tar.gz
Lookup generation in dict, not linearly
-rw-r--r--obnamlib/fmt_ga/client.py16
1 files changed, 11 insertions, 5 deletions
diff --git a/obnamlib/fmt_ga/client.py b/obnamlib/fmt_ga/client.py
index 12103029..6dd0f0b1 100644
--- a/obnamlib/fmt_ga/client.py
+++ b/obnamlib/fmt_ga/client.py
@@ -205,11 +205,11 @@ class GAClient(object):
return generation.get_key(key_name, default='')
def _lookup_generation_by_gen_number(self, gen_number):
- for generation in self._generations:
- if generation.get_number() == gen_number:
- return generation
- raise obnamlib.RepositoryGenerationDoesNotExist(
- gen_id=gen_number, client_name=self._client_name)
+ generation = self._generations.get_generation(gen_number)
+ if generation is None:
+ raise obnamlib.RepositoryGenerationDoesNotExist(
+ gen_id=gen_number, client_name=self._client_name)
+ return generation
def set_generation_key(self, gen_number, key, value):
self._load_data()
@@ -336,6 +336,7 @@ class GAGenerationList(object):
def __init__(self):
self._generations = []
+ self._by_number = {}
def __len__(self):
return len(self._generations)
@@ -344,14 +345,19 @@ class GAGenerationList(object):
for gen in self._generations[:]:
yield gen
+ def get_generation(self, gen_number):
+ return self._by_number.get(gen_number)
+
def get_latest(self):
return self._generations[-1]
def append(self, gen):
self._generations.append(gen)
+ self._by_number[gen.get_number()] = gen
def set_generations(self, generations):
self._generations = generations
+ self._by_number = dict((gen.get_number, gen) for gen in generations)
class GAGeneration(object):