def delete_unclaimed_files(): unclaimed_files = (File.query .filter(~File.claimed, File.created_dt <= (now_utc() - timedelta(days=1)), # skip files where deleting failed in the past ~File.meta.op('?')('deletion_failed')) .all()) for file in unclaimed_files: file_repr = repr(file) if config.DEBUG: logger.info('Would have removed unclaimed file %s (skipped due to debug mode)', file_repr) continue try: file.delete(delete_from_db=True) except StorageReadOnlyError: db.session.rollback() # undo deletion from db file.meta['deletion_failed'] = True flag_modified(file, 'meta') logger.warning('Could not delete unclaimed file %s (read-only storage)', file_repr) except StorageError as exc: db.session.rollback() # undo deletion from db logger.error('Could not delete unclaimed file %s: %s', file_repr, exc) else: logger.info('Removed unclaimed file %s', file_repr) db.session.commit()
def _save_file(self, file, stream): context = self.get_file_context() content_type = mimetypes.guess_type(file.filename)[0] or file.mimetype or 'application/octet-stream' f = File(filename=file.filename, content_type=content_type) f.save(context, stream) db.session.add(f) db.session.flush() logger.info('File %r uploaded (context: %r)', f, context) return FileSchema().jsonify(f), 201
def _process(self): file_repr = repr(self.file) self.file.delete(delete_from_db=True) logger.info('File %s deleted', file_repr) return '', 204
def _process(self): file_repr = repr(self.file) self.file.delete() db.session.delete(self.file) logger.info('File %s deleted', file_repr) return '', 204