diff options
| author | Fulgen301 <tokmajigeorge@gmail.com> | 2018-09-16 16:58:21 +0200 |
|---|---|---|
| committer | Fulgen301 <tokmajigeorge@gmail.com> | 2018-09-16 16:58:21 +0200 |
| commit | 027139279aa0e83c123ba26139d84505f1d4af90 (patch) | |
| tree | ff9ecd64cab21f2b034288a476870282fb944fa5 /routes/media.py | |
| parent | 0184fbb68c8bf1d8d1a123929dfab0497d5236af (diff) | |
| download | parry-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.py | 37 |
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) |
