Add basic upload image capabilities

This commit is contained in:
xray7224 2013-09-24 20:30:51 +01:00 committed by Jessica Tallon
parent c894b4246a
commit d4a21d7e74
5 changed files with 64 additions and 4 deletions

View File

@ -404,7 +404,7 @@ def oauth_required(controller):
valid, r = resource_endpoint.validate_protected_resource_request(
uri=request.url,
http_method=request.method,
body=request.get_data(),
body=request.data,
headers=dict(request.headers),
)

View File

@ -36,6 +36,12 @@ add_route(
"mediagoblin.federation.views:feed"
)
add_route(
"mediagoblin.federation.user.uploads",
"/api/user/<string:username>/uploads",
"mediagoblin.federation.views:uploads"
)
add_route(
"mediagoblin.federation.inbox",
"/api/user/<string:username>/inbox",

View File

@ -1,9 +1,16 @@
import json
import io
from werkzeug.datastructures import FileStorage
from mediagoblin.media_types import sniff_media
from mediagoblin.decorators import oauth_required
from mediagoblin.db.models import User, MediaEntry, MediaComment
from mediagoblin.tools.response import redirect, json_response
from mediagoblin.meddleware.csrf import csrf_exempt
from mediagoblin.notifications import add_comment_subscription
from mediagoblin.submit.lib import (new_upload_entry, prepare_queue_task,
run_process_media)
#@oauth_required
def profile(request, raw=False):
@ -36,11 +43,58 @@ def user(request):
return json_response(data)
#@oauth_required
@csrf_exempt
def uploads(request):
""" This is the endpoint which uploads can be sent ot - /api/user/<username>/uploads """
user = request.matchdict["username"]
requested_user = User.query.filter_by(username=user)
if requested_user is None:
error = "No such 'user' with id '{0}'".format(user)
return json_response({"error": error}, status=404)
request.user = requested_user[0]
if request.method == "POST":
# Wrap the data in the werkzeug file wrapper
file_data = FileStorage(
stream=io.BytesIO(request.data),
filename=request.form.get("qqfile", "unknown.jpg"),
content_type=request.headers.get("Content-Type", "application/octal-stream")
)
# Use the same kind of method from mediagoblin/submit/views:submit_start
media_type, media_manager = sniff_media(file_data)
entry = new_upload_entry(request.user)
entry.media_type = unicode(media_type)
entry.title = u"Hello ^_^"
entry.description = u""
entry.license = None
entry.generate_slug()
queue_file = prepare_queue_task(request.app, entry, file_data.filename)
with queue_file:
queue_file.write(request.data)
entry.save()
# run the processing
feed_url = request.urlgen(
'mediagoblin.user_pages.atom_feed',
qualified=True, user=request.user.username)
run_process_media(entry, feed_url)
add_comment_subscription(request.user, entry)
return json_response(entry.serialize(request))
return json_response({"error": "Not yet implemented"}, status=400)
@oauth_required
@csrf_exempt
def feed(request):
""" Handles the user's outbox - /api/user/<username>/feed """
print request.user
user = request.matchdict["username"]
requested_user = User.query.filter_by(username=user)

View File

@ -126,7 +126,7 @@ class GMGRequest(Request):
"""
kwargs["uri"] = kwargs.get("uri", request.url)
kwargs["http_method"] = kwargs.get("http_method", request.method)
kwargs["body"] = kwargs.get("body", request.get_data())
kwargs["body"] = kwargs.get("body", request.data)
kwargs["headers"] = kwargs.get("headers", dict(request.headers))
super(GMGRequest, self).__init__(*args, **kwargs)

View File

@ -45,7 +45,7 @@ def setup_user_in_request(request):
def decode_request(request):
""" Decodes a request based on MIME-Type """
data = request.get_data()
data = request.data
if request.content_type == json_encoded:
data = json.loads(data)