# 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'],
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()