From 595944d46483112a9348df240cfb84a3ec2246f8 Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Thu, 16 Jun 2011 08:33:10 -0500 Subject: [PATCH 1/9] Recommending --set-upstream when doing a git push to a feature branch. This is nice because it means git will tell you when your branch is ahead/behind by several commits, assuming you keep working on it. --- docs/git.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/git.rst b/docs/git.rst index 8eb038b2..c3f7ccce 100644 --- a/docs/git.rst +++ b/docs/git.rst @@ -136,7 +136,7 @@ Slartibartfast does the following: 4. Slartibartfast pushes his changes to his clone (the remote is named ``origin``):: - git push origin issue_42 + git push origin issue_42 --set-upstream 5. Slartibartfast adds a comment to issue 42 with the url for his repository and the name of the branch he put the code in. He also From d49cf0e29c0165fcc2eddc5a324cf40b45fd1959 Mon Sep 17 00:00:00 2001 From: Caleb Forbes Davis V Date: Fri, 3 Jun 2011 20:36:51 -0500 Subject: [PATCH 2/9] issue #330 - creates a user gallery template --- .../mediagoblin/user_pages/gallery.html | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 mediagoblin/templates/mediagoblin/user_pages/gallery.html diff --git a/mediagoblin/templates/mediagoblin/user_pages/gallery.html b/mediagoblin/templates/mediagoblin/user_pages/gallery.html new file mode 100644 index 00000000..9e0c7d4a --- /dev/null +++ b/mediagoblin/templates/mediagoblin/user_pages/gallery.html @@ -0,0 +1,40 @@ +{# +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011 Free Software Foundation, Inc +# +# 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 . +#} +{% extends "mediagoblin/base.html" %} + +{% block mediagoblin_head %} + +{% endblock mediagoblin_head %} + +{% block mediagoblin_content -%} + {% if user %} +

'{{ user.username }}' gallery

+ + {% include "mediagoblin/utils/object_gallery.html" %} + + atom feed + {% else %} + {# This *should* not occur as the view makes sure we pass in a user. #} +

Sorry, no such user found.

+ {% endif %} +{% endblock %} From 184f2240cb9384bac9e3319f2d184e405e364611 Mon Sep 17 00:00:00 2001 From: cfdv Date: Tue, 7 Jun 2011 00:25:08 -0500 Subject: [PATCH 3/9] adds routing.py and view.py changes --- mediagoblin/user_pages/routing.py | 2 ++ mediagoblin/user_pages/views.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/mediagoblin/user_pages/routing.py b/mediagoblin/user_pages/routing.py index c5e9a984..92998726 100644 --- a/mediagoblin/user_pages/routing.py +++ b/mediagoblin/user_pages/routing.py @@ -19,6 +19,8 @@ from routes.route import Route user_routes = [ Route('mediagoblin.user_pages.user_home', "/{user}/", controller="mediagoblin.user_pages.views:user_home"), + Route('mediagoblin.user_pages.user_gallery', "/{user}/gallery/", + controller="mediagoblin.user_pages.views:user_gallery"), Route('mediagoblin.user_pages.media_home', '/{user}/m/{media}/', requirements=dict(m_id="[0-9a-fA-F]{24}"), controller="mediagoblin.user_pages.views:media_home"), diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index 323c3e54..ceea5158 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -49,6 +49,36 @@ def user_home(request, page): 'media_entries': media_entries, 'pagination': pagination}) +@uses_pagination +def user_gallery(request, page): + """'Gallery' of a User()""" + 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) + + 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/gallery.html') + + return Response( + template.render( + {'request': request, + 'user': user, + 'media_entries': media_entries, + 'pagination': pagination})) + @get_user_media_entry def media_home(request, media): From 4b5f5a08d3210f849a4acc3e0958aeaecbcacb5b Mon Sep 17 00:00:00 2001 From: cfdv Date: Thu, 9 Jun 2011 00:30:42 -0500 Subject: [PATCH 4/9] user_gallery controller calls render_to_reponse --- mediagoblin/user_pages/views.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index ceea5158..88b5dfe5 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -69,15 +69,12 @@ def user_gallery(request, page): if media_entries == None: return exc.HTTPNotFound() - template = request.template_env.get_template( - 'mediagoblin/user_pages/gallery.html') - - return Response( - template.render( - {'request': request, - 'user': user, - 'media_entries': media_entries, - 'pagination': pagination})) + return render_to_response( + request, + 'mediagoblin/user_pages/gallery.html', + {'user': user, + 'media_entries': media_entries, + 'pagination': pagination}) @get_user_media_entry From 850746677f6be266520c4b10112bcbef3739e204 Mon Sep 17 00:00:00 2001 From: cfdv Date: Sat, 11 Jun 2011 12:52:07 -0500 Subject: [PATCH 5/9] adds link to user gallery in mediagoblin_header_right of user page --- mediagoblin/templates/mediagoblin/base.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mediagoblin/templates/mediagoblin/base.html b/mediagoblin/templates/mediagoblin/base.html index 704e5aa7..c7313173 100644 --- a/mediagoblin/templates/mediagoblin/base.html +++ b/mediagoblin/templates/mediagoblin/base.html @@ -35,6 +35,8 @@

{% if request.user %} {{ request.user['username'] }}'s account + gallery (logout) {% else %} From 4cf2287a110771da4b505411c20e3f3e5913df07 Mon Sep 17 00:00:00 2001 From: cfdv Date: Thu, 16 Jun 2011 17:28:46 -0500 Subject: [PATCH 6/9] adds link from gallery back to user page --- mediagoblin/templates/mediagoblin/user_pages/gallery.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mediagoblin/templates/mediagoblin/user_pages/gallery.html b/mediagoblin/templates/mediagoblin/user_pages/gallery.html index 9e0c7d4a..1d8fbdaa 100644 --- a/mediagoblin/templates/mediagoblin/user_pages/gallery.html +++ b/mediagoblin/templates/mediagoblin/user_pages/gallery.html @@ -26,7 +26,9 @@ {% block mediagoblin_content -%} {% if user %} -

'{{ user.username }}' gallery

+

gallery for {{ user.username }}

{% include "mediagoblin/utils/object_gallery.html" %} From 8af8e3c1a928c4696926fd9456a085219b8105c1 Mon Sep 17 00:00:00 2001 From: Chris Moylan Date: Thu, 16 Jun 2011 22:14:27 -0500 Subject: [PATCH 7/9] added vim swapfiles to gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9e01560a..9187e738 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,5 @@ mediagoblin.egg-info docs/_build/ user_dev/ server-log.txt -*~ \ No newline at end of file +*~ +*.swp From 757690cc2e0e758bfc135ac8b45544d83c7ba88a Mon Sep 17 00:00:00 2001 From: Chris Moylan Date: Fri, 17 Jun 2011 00:15:24 -0500 Subject: [PATCH 8/9] logins are now somewhat tested --- mediagoblin/tests/test_auth.py | 48 ++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/mediagoblin/tests/test_auth.py b/mediagoblin/tests/test_auth.py index 3d569093..b8389f8d 100644 --- a/mediagoblin/tests/test_auth.py +++ b/mediagoblin/tests/test_auth.py @@ -77,7 +77,7 @@ def test_register_views(test_app): # Make sure it rendered with the appropriate template assert util.TEMPLATE_TEST_CONTEXT.has_key( 'mediagoblin/auth/register.html') - + # Try to register without providing anything, should error # -------------------------------------------------------- @@ -182,7 +182,7 @@ def test_register_views(test_app): unicode(new_user['_id'])] assert parsed_get_params['token'] == [ new_user['verification_key']] - + ## Try verifying with bs verification key, shouldn't work util.clear_test_template_context() test_app.get( @@ -209,8 +209,6 @@ def test_register_views(test_app): assert new_user['status'] == u'active' assert new_user['email_verified'] == True - ## TODO: Try logging in - # Uniqueness checks # ----------------- ## We shouldn't be able to register with that user twice @@ -221,7 +219,7 @@ def test_register_views(test_app): 'password': 'iamsohappy2', 'confirm_password': 'iamsohappy2', 'email': 'happygrrl2@example.org'}) - + context = util.TEMPLATE_TEST_CONTEXT[ 'mediagoblin/auth/register.html'] form = context['register_form'] @@ -229,3 +227,43 @@ def test_register_views(test_app): u'Sorry, a user with that name already exists.'] ## TODO: Also check for double instances of an email address? + + +@setup_fresh_app +def test_authentication_views(test_app): + """ + Test logging in and logging out + """ + # Make a new user + test_user = mg_globals.database.User() + test_user['username'] = u'chris' + test_user['email'] = u'chris@example.com' + test_user['pw_hash'] = auth_lib.bcrypt_gen_password_hash('toast') + test_user.save() + + # Get login + test_app.get('/auth/login/') + # Make sure it rendered with the appropriate template + assert util.TEMPLATE_TEST_CONTEXT.has_key( + 'mediagoblin/auth/login.html') + + # Log in as that user + util.clear_test_template_context() + response = test_app.post( + '/auth/login/', { + 'username': u'chris', + 'password': 'toast'}) + response.follow() + assert_equal( + urlparse.urlsplit(response.location)[2], + '/') + assert util.TEMPLATE_TEST_CONTEXT.has_key( + 'mediagoblin/root.html') + + # Make sure we're in the session or something + session = util.TEMPLATE_TEST_CONTEXT['mediagoblin/root.html']['request'].session + assert session['user_id'] == unicode(test_user['_id']) + + # Log out as that user + # Make sure we're not in the session + From 5a994e37c2947d20e3aedfb78f9d6194dd59d506 Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Fri, 17 Jun 2011 17:44:36 -0500 Subject: [PATCH 9/9] We require lxml. Updating setup.py to reflect that. --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 46da7276..ae5394eb 100644 --- a/setup.py +++ b/setup.py @@ -42,6 +42,7 @@ setup( 'translitcodec', 'argparse', 'webtest', + 'lxml', ], test_suite='nose.collector',