def rebuild_export(config, schema, output_dir, last_access_cutoff=None, filter=None): if output_dir == "couch": saved = get_saved_export_and_delete_copies(config.index) if last_access_cutoff and saved and saved.last_accessed and \ saved.last_accessed < last_access_cutoff: # ignore exports that haven't been accessed since last_access_cutoff return try: files = schema.get_export_files(format=config.format, filter=filter) except SchemaMismatchException: # fire off a delayed force update to prevent this from happening again rebuild_schemas.delay(config.index) raise ExportRebuildError(u'Schema mismatch for {}. Rebuilding tables...'.format(config.filename)) with files: payload = files.file.payload if output_dir == "couch": if not saved: saved = SavedBasicExport(configuration=config) else: saved.configuration = config if saved.last_accessed is None: saved.last_accessed = datetime.utcnow() saved.last_updated = datetime.utcnow() saved.save() saved.set_payload(payload) else: with open(os.path.join(output_dir, config.filename), "wb") as f: f.write(payload)
def _save_export_payload(files, saved_export, config, is_safe=False): payload = files.file.payload if not saved_export: saved_export = SavedBasicExport(configuration=config) else: saved_export.configuration = config saved_export.is_safe = is_safe if saved_export.last_accessed is None: saved_export.last_accessed = datetime.utcnow() saved_export.last_updated = datetime.utcnow() try: saved_export.save() except ResourceConflict: # task was executed concurrently, so let first to finish win and abort the rest pass else: saved_export.set_payload(payload)