def credentials(mocker, now): gmd_mock = mocker.Mock(return_value='test') gmd_mock.range_keyname = 'test' mocker.patch( 'confidant.scripts.restore.Credential._get_meta_data', return_value=gmd_mock, ) mocker.patch( 'confidant.scripts.restore.CredentialArchive._get_meta_data', return_value=gmd_mock, ) archive_credential = CredentialArchive( id='1234', name='test', data_type='credential', revision=2, enabled=True, modified_date=now, modified_by='*****@*****.**', ) credential = Credential.from_archive_credential(archive_credential) archive_revision1 = CredentialArchive( id='1234-1', name='test revision1', data_type='archive-credential', revision=1, enabled=True, modified_date=now, modified_by='*****@*****.**', ) revision1 = Credential.from_archive_credential(archive_revision1) archive_revision2 = Credential( id='1234-2', name='test revision2', data_type='archive-credential', revision=2, enabled=True, modified_date=now, modified_by='*****@*****.**', ) revision2 = Credential.from_archive_credential(archive_revision2) def from_archive_credential(archive_credential): if archive_credential.id == '1234': return credential elif archive_credential.id == '1234-1': return revision1 elif archive_credential.id == '1234-2': return revision2 mocker.patch.object(Credential, 'from_archive_credential', from_archive_credential) return { 'credentials': [credential], 'archive_credentials': [archive_credential], 'revisions': [revision1, revision2], 'archive_revisions': [archive_revision1, archive_revision2], }
def restore(self, archive_credentials, force): for archive_credential in archive_credentials: saves = [] # restore the current record credential = Credential.from_archive_credential( archive_credential, ) saves.append(credential) # fetch and restore every revision _range = range(1, credential.revision + 1) ids = [] for i in _range: ids.append("{0}-{1}".format(credential.id, i)) archive_revisions = CredentialArchive.batch_get(ids) for archive_revision in archive_revisions: revision = Credential.from_archive_credential( archive_revision, ) saves.append(revision) try: self.save(saves, force=force) except Exception: logger.exception('Failed to batch save {}.'.format( credential.id)) stats.incr('restore.save.failure') continue