summaryrefslogtreecommitdiff
path: root/fbin/file_storage/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'fbin/file_storage/base.py')
-rw-r--r--fbin/file_storage/base.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/fbin/file_storage/base.py b/fbin/file_storage/base.py
new file mode 100644
index 0000000..6f39665
--- /dev/null
+++ b/fbin/file_storage/base.py
@@ -0,0 +1,39 @@
+import datetime
+
+from .. import db
+
+class BaseStorage:
+ def __init__(self, app):
+ self.app = app
+
+ def add_file(self, file_hash, filename, size, user=None, ip=None):
+ '''Adds the file to the database.
+
+ Call from store_file after the file is successfully stored.'''
+ with db.session_scope() as sess:
+ f = db.File(file_hash, filename, size, datetime.datetime.utcnow(), user.id if user else None, ip)
+ sess.add(f)
+ sess.commit()
+ sess.refresh(f)
+ return f
+
+ def store_file(self, uploaded_file, file_hash, filename, user, ip):
+ '''Store uploaded_file.'''
+ raise NotImplementedError()
+
+ def get_file(self, f):
+ '''Return a file object for the specified file.
+
+ Subclasses can also return a flask.Response instance if required.'''
+ raise NotImplementedError()
+
+ def delete_file(self, f):
+ '''Delete the specified file.'''
+ raise NotImplementedError()
+
+ def temp_file(self, f):
+ '''Context manager which returns a temporary file for reading.
+
+ This is used internally for eg. thumbnails.'''
+ raise NotImplementedError()
+