Merge branch 'master' of http://git.gitorious.org/mediagoblin/mediagoblin
[mediagoblin.git] / mediagoblin / user_pages / views.py
index cb2c58752063e940ac0c7ea7285c4ae9ed904cdc..4ec0f0aac7ab864ef08b9f44f8e87e936831880f 100644 (file)
 # 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 webob import Response, exc
-from pymongo import DESCENDING
-from mongokit import ObjectId
-import wtforms
-from mediagoblin.util import Pagination
-from pymongo import ASCENDING, DESCENDING
+from webob import exc
+from mediagoblin.db.util import DESCENDING
+from mediagoblin.util import Pagination, render_to_response
 
-from mediagoblin.decorators import uses_pagination
+from mediagoblin.decorators import uses_pagination, get_user_media_entry
+
+from werkzeug.contrib.atom import AtomFeed
 
 @uses_pagination
-def user_home(request):
+def user_home(request, page):
     """'Homepage' of a User()"""
     user = request.db.User.find_one({
             'username': request.matchdict['user'],
@@ -32,43 +31,63 @@ def user_home(request):
     if not user:
         return exc.HTTPNotFound()
 
-    cursor = request.db.MediaEntry \
-                .find({'uploader': user, 'state': 'processed'}) \
-               .sort('created', DESCENDING)
-    
+    cursor = request.db.MediaEntry.find(
+        {'uploader': user['_id'],
+         'state': 'processed'}).sort('created', DESCENDING)
 
-    pagination = Pagination( int(request.str_GET['page']), cursor)
+    pagination = Pagination(page, cursor)
     media_entries = pagination()
 
     #if no data is available, return NotFound
     if media_entries == None:
         return exc.HTTPNotFound()
     
-    template = request.template_env.get_template(
-        'mediagoblin/user_pages/user.html')
+    return render_to_response(
+        request,
+        'mediagoblin/user_pages/user.html',
+        {'user': user,
+         'media_entries': media_entries,
+         'pagination': pagination})
 
-    return Response(
-        template.render(
-            {'request': request,
-             'user': user,
-             'media_entries': media_entries,
-             'pagination': pagination}))
 
-def media_home(request):
+@get_user_media_entry
+def media_home(request, media):
     """'Homepage' of a MediaEntry()"""
-    media = request.db.MediaEntry.find_one({
-            '_id': ObjectId(request.matchdict['m_id']),
-            'state': 'processed'})
+    return render_to_response(
+        request,
+        'mediagoblin/user_pages/media.html',
+        {'media': media})
 
-    # Check that media uploader and user correspond.
-    if not media or \
-            media['uploader'].get('username') != request.matchdict['user']:
-        return exc.HTTPNotFound()
 
-    template = request.template_env.get_template(
-        'mediagoblin/user_pages/media.html')
-    return Response(
-        template.render(
-            {'request': request,
-             'media': media}))
+ATOM_DEFAULT_NR_OF_UPDATED_ITEMS = 5
+
+def atom_feed(request):
+    """
+    generates the atom feed with the newest images
+    """
+
+    user = request.db.User.find_one({
+               'username': request.matchdict['user'],
+               'status': 'active'})
+    if not user:
+       return exc.HTTPNotFound()
+
+    cursor = request.db.MediaEntry.find({
+                 'uploader': user['_id'],
+                 'state': 'processed'}) \
+                 .sort('created', DESCENDING) \
+                 .limit(ATOM_DEFAULT_NR_OF_UPDATED_ITEMS)
+
+    feed = AtomFeed(request.matchdict['user'],
+               feed_url=request.url,
+               url=request.host_url)
+    
+    for entry in cursor:
+        feed.add(entry.get('title'),
+            entry.get('description_html'),
+            content_type='html',
+            author=request.matchdict['user'],
+            updated=entry.get('created'),
+            url=entry.url_for_self(request.urlgen))
 
+    return feed.get_response()