diff options
author | Jessica Tallon <jessica@megworld.co.uk> | 2014-08-22 18:53:29 +0100 |
---|---|---|
committer | Jessica Tallon <jessica@megworld.co.uk> | 2014-08-22 23:18:01 +0100 |
commit | b949201152b2ff3a5b072107ae903ddac309a530 (patch) | |
tree | 1823d3ec62b0bcdaee372bfa6ae193087912eb9b /mediagoblin/federation/views.py | |
parent | 51f49118555be3021127602aef78a548850b59b5 (diff) | |
download | mediagoblin-b949201152b2ff3a5b072107ae903ddac309a530.tar.lz mediagoblin-b949201152b2ff3a5b072107ae903ddac309a530.tar.xz mediagoblin-b949201152b2ff3a5b072107ae903ddac309a530.zip |
Create activity model and add activity creation
This creates the Activity and Genrator models from the Activity
Streams spec and. I then created a migration which retro-actively
create activities for media uploaded and comments created. Through
out the code I've added so automatically activties are created when
a user peforms an action (uploading media, commenting, etc.).
Diffstat (limited to 'mediagoblin/federation/views.py')
-rw-r--r-- | mediagoblin/federation/views.py | 52 |
1 files changed, 34 insertions, 18 deletions
diff --git a/mediagoblin/federation/views.py b/mediagoblin/federation/views.py index 3d6953a7..7d02d02e 100644 --- a/mediagoblin/federation/views.py +++ b/mediagoblin/federation/views.py @@ -20,10 +20,11 @@ import mimetypes from werkzeug.datastructures import FileStorage -from mediagoblin.decorators import oauth_required +from mediagoblin.decorators import oauth_required, require_active_login from mediagoblin.federation.decorators import user_has_privilege -from mediagoblin.db.models import User, MediaEntry, MediaComment -from mediagoblin.tools.response import redirect, json_response, json_error +from mediagoblin.db.models import User, MediaEntry, MediaComment, Activity +from mediagoblin.tools.response import redirect, json_response, json_error, \ + render_404, render_to_response from mediagoblin.meddleware.csrf import csrf_exempt from mediagoblin.submit.lib import new_upload_entry, api_upload_request, \ api_add_to_feed @@ -340,21 +341,8 @@ def feed_endpoint(request): "items": [], } - - # Look up all the media to put in the feed (this will be changed - # when we get real feeds/inboxes/outboxes/activites) - for media in MediaEntry.query.all(): - item = { - "verb": "post", - "object": media.serialize(request), - "actor": media.get_uploader.serialize(request), - "content": "{0} posted a picture".format(request.user.username), - "id": media.id, - } - item["updated"] = item["object"]["updated"] - item["published"] = item["object"]["published"] - item["url"] = item["object"]["url"] - feed["items"].append(item) + for activity in Activity.query.filter_by(actor=request.user.id): + feed["items"].append(activity.serialize(request)) feed["totalItems"] = len(feed["items"]) return json_response(feed) @@ -467,3 +455,31 @@ def whoami(request): ) return redirect(request, location=profile) + +@require_active_login +def activity_view(request): + """ /<username>/activity/<id> - Display activity + + This should display a HTML presentation of the activity + this is NOT an API endpoint. + """ + # Get the user object. + username = request.matchdict["username"] + user = User.query.filter_by(username=username).first() + + activity_id = request.matchdict["id"] + + if request.user is None: + return render_404(request) + + activity = Activity.query.filter_by(id=activity_id).first() + if activity is None: + return render_404(request) + + return render_to_response( + request, + "mediagoblin/federation/activity.html", + {"activity": activity} + ) + + |