aboutsummaryrefslogtreecommitdiffstats
path: root/routes/media.py
diff options
context:
space:
mode:
authorFulgen301 <tokmajigeorge@gmail.com>2018-09-16 16:58:21 +0200
committerFulgen301 <tokmajigeorge@gmail.com>2018-09-16 16:58:21 +0200
commit027139279aa0e83c123ba26139d84505f1d4af90 (patch)
treeff9ecd64cab21f2b034288a476870282fb944fa5 /routes/media.py
parent0184fbb68c8bf1d8d1a123929dfab0497d5236af (diff)
downloadparry-027139279aa0e83c123ba26139d84505f1d4af90.tar.gz
parry-027139279aa0e83c123ba26139d84505f1d4af90.zip
Use sqlalchemy as backend, implement JWT authentication, add uploading, commenting and voting
Diffstat (limited to 'routes/media.py')
-rw-r--r--routes/media.py37
1 files changed, 34 insertions, 3 deletions
diff --git a/routes/media.py b/routes/media.py
index b9828a8..207eeda 100644
--- a/routes/media.py
+++ b/routes/media.py
@@ -13,14 +13,45 @@
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
from ..helpers import *
+import magic
from datetime import datetime
-@route("/api/media")
+def _upload_file(file, entry=None):
+ f = File(id=ObjectId(), name=file.filename, upload=entry)
+ path = os.path.join(os.getcwd(), "media", str(f.id))
+ file.save(path)
+
+ with open(path, "rb") as fobj:
+ f.hash = calculateHashForFile(fobj).hexdigest()
+ f.length = fobj.tell()
+
+ f.content_type = magic.from_file(path, mime=True)
+
+ return f
+
+def _delete_file(file):
+ try:
+ os.unlink(os.path.join(os.getcwd(), "media", str(file.id)))
+ except FileNotFoundError:
+ pass
+ except OSError:
+ print("Failed to unlink", file.id, file=sys.stderr)
+
+@get("/api/media")
def get_media():
notAllowed()
+@post("/api/media")
+@jwt_auth_required
+def post_media():
+ session = DBSession()
+ f = _upload_file(next(request.files.values()))
+ session.add(f)
+ session.commit()
+ print(f.json())
+ return HTTPResponse(f.json(), status=201)
-@route("/api/media/<id>")
+@get("/api/media/<id>")
def get_media_id(id):
session = DBSession()
try:
@@ -37,6 +68,6 @@ def get_media_id(id):
#return requests.request(request.method, file.download_url, allow_redirects=True)
return HTTPResponse(status=302, headers={"Location" : file.download_url})
else:
- return static_file(file.id, os.path.join(os.getcwd(), "media"), file.content_type, file.name)
+ return static_file(str(file.id), os.path.join(os.getcwd(), "media"), file.content_type, download=file.name if request.params.download else False)
raise HTTPResponse(status=404)