Esempio n. 1
0
def restore_datafile(datafile, noRemove=False):
    """
    Restore a file that has been migrated
    """
    
    # (Deferred imports to avoid prematurely triggering DB init)
    from tardis.tardis_portal.models import Dataset_File
    from django.db import transaction
    with transaction.commit_on_success():
        df = Dataset_File.objects.select_for_update().get(id=datafile.id)
        if df.is_local():
            return False
        destination = Destination.identify_destination(df.url)
        if not destination:
            raise MigrationError('Cannot identify the migration destination' \
                                     ' holding %s' % df.url)
        if not df.verified or destination.trust_length:
            raise MigrationError('Only verified datafiles can be restored' \
                                 ' from destination %s' % destination.name)
        df.verified = False
        url = df.url
        if not stage_file(df):
            raise MigrationError('Restoration failed')
        logger.info('Restored file %s for datafile %s' %
                    (df.get_absolute_filepath(), df.id))
        if not noRemove:
            destination.provider.remove_file(url)
            logger.info('Removed remote file %s for datafile %s' % (url, df.id))
        return True