Beispiel #1
0
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()
Beispiel #2
0
 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
Beispiel #3
0
 def _process(self):
     file_repr = repr(self.file)
     self.file.delete(delete_from_db=True)
     logger.info('File %s deleted', file_repr)
     return '', 204
Beispiel #4
0
 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