Create add_media_to_collection()
authorElrond <elrond+mediagoblin.org@samba-tng.org>
Tue, 23 Apr 2013 10:29:17 +0000 (12:29 +0200)
committerElrond <elrond+mediagoblin.org@samba-tng.org>
Tue, 23 Apr 2013 10:29:17 +0000 (12:29 +0200)
The ideas is by Alon Levy.

Not only media_collect, but also other places might want to
add media to a collection. So refactor this into a function
for easier usage.

mediagoblin/user_pages/lib.py
mediagoblin/user_pages/views.py

index 8a064a7c5d0f218496b006fb33f4564f2726bdf4..2f47e4b18581ca0c3eca1bfa780204b7db37dfeb 100644 (file)
@@ -18,6 +18,8 @@ from mediagoblin.tools.mail import send_email
 from mediagoblin.tools.template import render_template
 from mediagoblin.tools.translate import pass_to_ugettext as _
 from mediagoblin import mg_globals
+from mediagoblin.db.base import Session
+from mediagoblin.db.models import CollectionItem
 
 
 def send_comment_email(user, comment, media, request):
@@ -55,3 +57,21 @@ def send_comment_email(user, comment, media, request):
             instance_title=mg_globals.app_config['html_title']) \
                     + _('commented on your post'),
         rendered_email)
+
+
+def add_media_to_collection(collection, media, note=None, commit=True):
+    collection_item = CollectionItem()
+    collection_item.collection = collection.id
+    collection_item.media_entry = media.id
+    if note:
+        collection_item.note = note
+    Session.add(collection_item)
+
+    collection.items = collection.items + 1
+    Session.add(collection)
+
+    media.collected = media.collected + 1
+    Session.add(media)
+
+    if commit:
+        Session.commit()
index 61c23f16110a96f6e366daae8afd558d0814a376..e3b46c0f8787b41a0868d38f6d113727265d8456 100644 (file)
@@ -24,7 +24,8 @@ from mediagoblin.tools.response import render_to_response, render_404, redirect
 from mediagoblin.tools.translate import pass_to_ugettext as _
 from mediagoblin.tools.pagination import Pagination
 from mediagoblin.user_pages import forms as user_forms
-from mediagoblin.user_pages.lib import send_comment_email
+from mediagoblin.user_pages.lib import (send_comment_email,
+    add_media_to_collection)
 
 from mediagoblin.decorators import (uses_pagination, get_user_media_entry,
     get_media_entry_by_id,
@@ -248,17 +249,7 @@ def media_collect(request, media):
                              _('"%s" already in collection "%s"')
                              % (media.title, collection.title))
     else: # Add item to collection
-        collection_item = request.db.CollectionItem()
-        collection_item.collection = collection.id
-        collection_item.media_entry = media.id
-        collection_item.note = form.note.data
-        collection_item.save()
-
-        collection.items = collection.items + 1
-        collection.save()
-
-        media.collected = media.collected + 1
-        media.save()
+        add_media_to_collection(collection, media, form.note.data)
 
         messages.add_message(request, messages.SUCCESS,
                              _('"%s" added to collection "%s"')