Oops forgot to add medigoblin.tools.federation
authorJessica Tallon <jessica@megworld.co.uk>
Wed, 27 Aug 2014 14:32:59 +0000 (15:32 +0100)
committerJessica Tallon <jessica@megworld.co.uk>
Wed, 27 Aug 2014 14:32:59 +0000 (15:32 +0100)
mediagoblin/tools/federation.py [new file with mode: 0644]

diff --git a/mediagoblin/tools/federation.py b/mediagoblin/tools/federation.py
new file mode 100644 (file)
index 0000000..573b059
--- /dev/null
@@ -0,0 +1,61 @@
+# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2014 MediaGoblin contributors.  See AUTHORS.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+from mediagoblin.db.models import Activity, Generator, User, MediaEntry, \
+                                  MediaComment, Collection
+
+def create_activity(verb, obj, target=None, actor=None):
+    """
+    This will create an Activity object which for the obj if possible
+    and save it. The verb should be one of the following:
+        add, author, create, delete, dislike, favorite, follow
+        like, post, share, unfollow, unfavorite, unlike, unshare,
+        update, tag.
+
+    If none of those fit you might not want/need to create an activity for
+    the object. The list is in mediagoblin.db.models.Activity.VALID_VERBS
+
+    If no actor is supplied it'll take the actor/author/uploader/etc. from
+    the object if possible, else raise a ValueError
+    """
+    # exception when we try and generate an activity with an unknow verb
+    # could change later to allow arbitrary verbs but at the moment we'll play
+    # it safe.
+
+    if verb not in Activity.VALID_VERBS:
+        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()
+    activity = Activity(verb=verb)
+    activity.set_object(obj)
+
+    if target is not None:
+        activity.set_target(target)
+
+    if actor is not None:
+        # If they've set it override the actor from the obj.
+        activity.actor = actor.id if isinstance(actor, User) else actor
+
+    activity.generator = generator.id
+    activity.save()
+
+    # Sigh want to do this prior to save but I can't figure a way to get
+    # around relationship() not looking up object when model isn't saved.
+    if activity.generate_content():
+        activity.save()
+
+    return activity