Fix #1024 - Correctly set generator on Activities

This commit is contained in:
Jessica Tallon 2014-12-02 14:50:35 +00:00
parent 6740d03422
commit 5436d980a1
4 changed files with 58 additions and 13 deletions

View File

@ -419,9 +419,9 @@ def oauth_required(controller):
# Fill user if not already # Fill user if not already
token = authorization[u"oauth_token"] token = authorization[u"oauth_token"]
access_token = AccessToken.query.filter_by(token=token).first() request.access_token = AccessToken.query.filter_by(token=token).first()
if access_token is not None and request.user is None: if request.access_token is not None and request.user is None:
user_id = access_token.user user_id = request.access_token.user
request.user = User.query.filter_by(id=user_id).first() request.user = User.query.filter_by(id=user_id).first()
return controller(request, *args, **kwargs) return controller(request, *args, **kwargs)

View File

@ -23,6 +23,7 @@ from werkzeug.datastructures import FileStorage
from mediagoblin.decorators import oauth_required, require_active_login from mediagoblin.decorators import oauth_required, require_active_login
from mediagoblin.federation.decorators import user_has_privilege from mediagoblin.federation.decorators import user_has_privilege
from mediagoblin.db.models import User, MediaEntry, MediaComment, Activity from mediagoblin.db.models import User, MediaEntry, MediaComment, Activity
from mediagoblin.tools.federation import create_activity, create_generator
from mediagoblin.tools.routing import extract_url_arguments from mediagoblin.tools.routing import extract_url_arguments
from mediagoblin.tools.response import redirect, json_response, json_error, \ from mediagoblin.tools.response import redirect, json_response, json_error, \
render_404, render_to_response render_404, render_to_response
@ -180,6 +181,17 @@ def feed_endpoint(request):
comment = MediaComment(author=request.user.id) comment = MediaComment(author=request.user.id)
comment.unserialize(data["object"], request) comment.unserialize(data["object"], request)
comment.save() comment.save()
# Create activity for comment
generator = create_generator(request)
activity = create_activity(
verb="post",
actor=request.user,
obj=comment,
target=comment.get_entry,
generator=generator
)
data = { data = {
"verb": "post", "verb": "post",
"object": comment.serialize(request) "object": comment.serialize(request)

View File

@ -26,7 +26,7 @@ from werkzeug.datastructures import FileStorage
from mediagoblin import mg_globals from mediagoblin import mg_globals
from mediagoblin.tools.response import json_response from mediagoblin.tools.response import json_response
from mediagoblin.tools.text import convert_to_tag_list_of_dicts from mediagoblin.tools.text import convert_to_tag_list_of_dicts
from mediagoblin.tools.federation import create_activity from mediagoblin.tools.federation import create_activity, create_generator
from mediagoblin.db.models import MediaEntry, ProcessingMetaData from mediagoblin.db.models import MediaEntry, ProcessingMetaData
from mediagoblin.processing import mark_entry_failed from mediagoblin.processing import mark_entry_failed
from mediagoblin.processing.task import ProcessMedia from mediagoblin.processing.task import ProcessMedia
@ -294,7 +294,12 @@ def api_add_to_feed(request, entry):
add_comment_subscription(request.user, entry) add_comment_subscription(request.user, entry)
# Create activity # Create activity
create_activity("post", entry, entry.uploader) create_activity(
verb="post",
obj=entry,
actor=entry.uploader,
generator=create_generator(request)
)
entry.save() entry.save()
run_process_media(entry, feed_url) run_process_media(entry, feed_url)

View File

@ -16,7 +16,34 @@
from mediagoblin.db.models import Activity, Generator, User from mediagoblin.db.models import Activity, Generator, User
def create_activity(verb, obj, actor, target=None): def create_generator(request):
"""
This creates a Generator object based on the Client associated with the
OAuth credentials used. If the request has invalid OAuth credentials or
no OAuth credentials None is returned.
"""
if not hasattr(request, "access_token"):
return None
client = request.access_token.get_requesttoken.get_client
# Check if there is a generator already
generator = Generator.query.filter_by(
name=client.application_name,
object_type="client"
).first()
if generator is None:
generator = Generator(
name=client.application_name,
object_type="client"
)
generator.save()
return generator
def create_activity(verb, obj, actor, target=None, generator=None):
""" """
This will create an Activity object which for the obj if possible This will create an Activity object which for the obj if possible
and save it. The verb should be one of the following: and save it. The verb should be one of the following:
@ -34,14 +61,15 @@ def create_activity(verb, obj, actor, target=None):
if verb not in Activity.VALID_VERBS: if verb not in Activity.VALID_VERBS:
raise ValueError("A invalid verb type has been supplied.") raise ValueError("A invalid verb type has been supplied.")
# This should exist as we're creating it by the migration for Generator
generator = Generator.query.filter_by(name="GNU MediaGoblin").first()
if generator is None: if generator is None:
generator = Generator( # This should exist as we're creating it by the migration for Generator
name="GNU MediaGoblin", generator = Generator.query.filter_by(name="GNU MediaGoblin").first()
object_type="service" if generator is None:
) generator = Generator(
generator.save() name="GNU MediaGoblin",
object_type="service"
)
generator.save()
activity = Activity(verb=verb) activity = Activity(verb=verb)
activity.set_object(obj) activity.set_object(obj)