/src/djapian/utils/commiter.py

http://djapian.googlecode.com/ · Python · 42 lines · 31 code · 11 blank · 0 comment · 3 complexity · 14a8681c74aeb8adcc643c866d0f495d MD5 · raw file

  1. class Commiter(object):
  2. def __init__(self, begin, commit, cancel):
  3. self._begin = begin
  4. self._commit = commit
  5. self._cancel = cancel
  6. def begin_page(self):
  7. pass
  8. def begin_object(self):
  9. pass
  10. def commit_page(self):
  11. pass
  12. def commit_object(self):
  13. pass
  14. def cancel_page(self):
  15. pass
  16. def cancel_object(self):
  17. pass
  18. @classmethod
  19. def create(cls, commit_each):
  20. class _ConcreteCommiter(cls):
  21. pass
  22. prefix = commit_each and 'object' or 'page'
  23. for name in ('begin', 'commit', 'cancel'):
  24. def make_method(name):
  25. return lambda self: getattr(self, '_%s' % name)()
  26. setattr(
  27. _ConcreteCommiter,
  28. '%s_%s' % (name, prefix),
  29. make_method(name)
  30. )
  31. return _ConcreteCommiter