This package contains a function to restore lost objects from a ZODB backup.
In the future, it might grow further tools for ZODB repair.

recover.restore_from_backup
===========================

The module ``recover`` defines the function ``restore_from_backup``
to restore lost objects from a ZODB backup. ``restore_from_backup``
has parameters *lost*, *backup* and *target*.

*lost* is an iterable of oids identifying objects lost in *target*.
The oids might e.g. have been found by the standard ``fsrefs`` utility.

*backup* and *target* are open ZODB storages. *backup* is read only
and can have been opened read only; *target* is read and written.

``restore_from_backup`` reads the objects identified by the oids in
*lost* from *backup* and writes them to *target*. If such a restored
object contains references to other objects not available in *target*,
they are restored recursively.
The operations are logged via Python's standard logging subsystem.

Example usage::

  from logging import basicConfig, getLogger, INFO
  from ZODB.FileStorage.FileStorage import FileStorage
  from dm.zodb.repair.recover import restore_from_backup
  
  basicConfig()
  logger = getLogger(); logger.setLevel(INFO)
  
  lost = [....] # list of oids for lost objects, e.g. derived from "fsrefs" output
  
  backup = FileStorage('backup.fs', read_only=True)
  target = FileStorage('target.fs')
  restore_from_backup(lost, backup, target)
  backup.close()
  target.close()
