diff -r 95c604ec89bf -r 57e956441ca4 dataimport.py --- a/dataimport.py Wed Aug 25 18:29:55 2010 +0200 +++ b/dataimport.py Wed Aug 25 18:55:58 2010 +0200 @@ -34,7 +34,7 @@ ] def gen_users(ctl): - for row in ctl.get_data('utilisateurs'): + for row in ctl.iter_and_commit('utilisateurs'): entity = mk_entity(row, USERS) entity['upassword'] = u'motdepasse' ctl.check('login', entity['login'], None) @@ -125,13 +125,15 @@ for row in it: yield [item.decode(encoding) for item in row] -def commit_every(nbit, store, it): - for i, x in enumerate(it): - yield x - if nbit is not None and i % nbit: - store.commit() - if nbit is not None: - store.commit() +def callfunc_every(func, number, iterable): + """yield items of `iterable` one by one and call function `func` + every `number` iterations. Always call function `func` at the end. + """ + for idx, item in enumerate(iterable): + yield item + if idx % number: + func() + func() def lazytable(reader): """The first row is taken to be the header of the table and @@ -230,7 +232,7 @@ return None def required(value): - """raise ValueError is value is empty + """raise ValueError if value is empty This check should be often found in last position in the chain. """ @@ -571,7 +573,10 @@ def iter_and_commit(self, datakey): """iter rows, triggering commit every self.commitevery iterations""" - return commit_every(self.commitevery, self.store, self.get_data(datakey)) + if self.commitevery is None: + return self.get_data(datakey) + else: + return callfunc_every(self.commitevery, self.store.commit, self.get_data(datakey))