Change codebase to query or create correct User model
authorJessica Tallon <tsyesika@tsyesika.se>
Fri, 17 Jul 2015 15:51:51 +0000 (17:51 +0200)
committerJessica Tallon <tsyesika@tsyesika.se>
Fri, 31 Jul 2015 13:15:24 +0000 (15:15 +0200)
The code base had many references to User.username and other
specific to LocalUser attributes as that was the way it use to exist.
This updates those to query on the generic User model but filtering
by attributes on the LocalUser.

33 files changed:
mediagoblin/api/decorators.py
mediagoblin/api/views.py
mediagoblin/auth/tools.py
mediagoblin/db/migrations.py
mediagoblin/decorators.py
mediagoblin/edit/views.py
mediagoblin/gmg_commands/addmedia.py
mediagoblin/gmg_commands/batchaddmedia.py
mediagoblin/gmg_commands/users.py
mediagoblin/media_types/blog/views.py
mediagoblin/moderation/tools.py
mediagoblin/moderation/views.py
mediagoblin/plugins/archivalook/tools.py
mediagoblin/plugins/basic_auth/__init__.py
mediagoblin/plugins/basic_auth/views.py
mediagoblin/plugins/ldap/views.py
mediagoblin/plugins/openid/__init__.py
mediagoblin/plugins/persona/__init__.py
mediagoblin/tests/__init__.py
mediagoblin/tests/test_auth.py
mediagoblin/tests/test_basic_auth.py
mediagoblin/tests/test_edit.py
mediagoblin/tests/test_ldap.py
mediagoblin/tests/test_modelmethods.py
mediagoblin/tests/test_moderation.py
mediagoblin/tests/test_openid.py
mediagoblin/tests/test_persona.py
mediagoblin/tests/test_privileges.py
mediagoblin/tests/test_reporting.py
mediagoblin/tests/test_submission.py
mediagoblin/tests/tools.py
mediagoblin/tools/federation.py
mediagoblin/user_pages/views.py

index 3dd6264ea90d17593d904caed19b17506671b938..b86099bda8188bf8fd64d7699b056e675235ea08 100644 (file)
@@ -15,7 +15,6 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 from functools import wraps
 
-from mediagoblin.db.models import User
 from mediagoblin.decorators import require_active_login
 from mediagoblin.tools.response import json_response
 
index 6095a721414f68ecf158c85c03cada587e4b032d..35f8405c42bb911438541c35fd5795da6e620486 100644 (file)
@@ -22,7 +22,7 @@ from werkzeug.datastructures import FileStorage
 
 from mediagoblin.decorators import oauth_required, require_active_login
 from mediagoblin.api.decorators import user_has_privilege
-from mediagoblin.db.models import User, MediaEntry, MediaComment, Activity
+from mediagoblin.db.models import User, LocalUser, MediaEntry, MediaComment, Activity
 from mediagoblin.tools.federation import create_activity, create_generator
 from mediagoblin.tools.routing import extract_url_arguments
 from mediagoblin.tools.response import redirect, json_response, json_error, \
@@ -45,7 +45,7 @@ def get_profile(request):
     can be found then this function returns a (None, None).
     """
     username = request.matchdict["username"]
-    user = User.query.filter_by(username=username).first()
+    user = User.query.filter(LocalUser.username==username).first()
 
     if user is None:
         return None, None
@@ -94,7 +94,7 @@ def user_endpoint(request):
 def uploads_endpoint(request):
     """ Endpoint for file uploads """
     username = request.matchdict["username"]
-    requested_user = User.query.filter_by(username=username).first()
+    requested_user = User.query.filter(LocalUser.username==username).first()
 
     if requested_user is None:
         return json_error("No such 'user' with id '{0}'".format(username), 404)
@@ -142,7 +142,7 @@ def inbox_endpoint(request, inbox=None):
     inbox: allows you to pass a query in to limit inbox scope
     """
     username = request.matchdict["username"]
-    user = User.query.filter_by(username=username).first()
+    user = User.query.filter(LocalUser.username==username).first()
 
     if user is None:
         return json_error("No such 'user' with id '{0}'".format(username), 404)
@@ -225,7 +225,7 @@ def inbox_major_endpoint(request):
 def feed_endpoint(request, outbox=None):
     """ Handles the user's outbox - /api/user/<username>/feed """
     username = request.matchdict["username"]
-    requested_user = User.query.filter_by(username=username).first()
+    requested_user = User.query.filter(LocalUser.username==username).first()
 
     # check if the user exists
     if requested_user is None:
@@ -747,7 +747,7 @@ def lrdd_lookup(request):
         username, host = resource.split("@", 1)
 
         # Now lookup the user
-        user = User.query.filter_by(username=username).first()
+        user = User.query.filter(LocalUser.username==username).first()
 
         if user is None:
             return json_error(
index 3737fab63b3480e497dc37560a68841ed87c1ca8..5a47dae4c8d7e8a9fa989dc60746428624ab3563 100644 (file)
@@ -23,7 +23,7 @@ from sqlalchemy import or_
 
 from mediagoblin import mg_globals
 from mediagoblin.tools.crypto import get_timed_signer_url
-from mediagoblin.db.models import User, Privilege
+from mediagoblin.db.models import LocalUser, Privilege
 from mediagoblin.tools.mail import (normalize_email, send_email,
                                     email_debug_message)
 from mediagoblin.tools.template import render_template
@@ -106,9 +106,9 @@ def send_verification_email(user, request, email=None,
 
 
 def basic_extra_validation(register_form, *args):
-    users_with_username = User.query.filter_by(
+    users_with_username = LocalUser.query.filter_by(
         username=register_form.username.data).count()
-    users_with_email = User.query.filter_by(
+    users_with_email = LocalUser.query.filter_by(
         email=register_form.email.data).count()
 
     extra_validation_passes = True
@@ -190,7 +190,7 @@ def no_auth_logout(request):
 
 
 def create_basic_user(form):
-    user = User()
+    user = LocalUser()
     user.username = form.username.data
     user.email = form.email.data
     user.save()
index 6b25aebf89e517725d12310d86e6613aae7e1317..b6c172e018e9f0934ffda9e64e69123e7be62f8d 100644 (file)
@@ -1305,6 +1305,7 @@ def migrate_data_foreign_keys(db):
     use the old ActivityIntermediator to the new temparay fields which use the
     new GenericForeignKey.
     """
+
     metadata = MetaData(bind=db.bind)
     activity_table = inspect_table(metadata, "core__activities")
     ai_table = inspect_table(metadata, "core__activity_intermediators")
index b5ec0ce81e4eebdbf964d29f4bcd078d9935d2bf..bda189880bd490358da3042b6d3e5d05b0936ce8 100644 (file)
@@ -23,7 +23,7 @@ from six.moves.urllib.parse import urljoin
 
 from mediagoblin import mg_globals as mgg
 from mediagoblin import messages
-from mediagoblin.db.models import MediaEntry, User, MediaComment, AccessToken
+from mediagoblin.db.models import MediaEntry, LocalUser, MediaComment, AccessToken
 from mediagoblin.tools.response import (
     redirect, render_404,
     render_user_banned, json_response)
@@ -106,12 +106,12 @@ def user_has_privilege(privilege_name, allow_admin=True):
 
 
 def active_user_from_url(controller):
-    """Retrieve User() from <user> URL pattern and pass in as url_user=...
+    """Retrieve LocalUser() from <user> URL pattern and pass in as url_user=...
 
     Returns a 404 if no such active user has been found"""
     @wraps(controller)
     def wrapper(request, *args, **kwargs):
-        user = User.query.filter_by(username=request.matchdict['user']).first()
+        user = LocalUser.query.filter_by(username=request.matchdict['user']).first()
         if user is None:
             return render_404(request)
 
@@ -142,7 +142,7 @@ def user_may_alter_collection(controller):
     """
     @wraps(controller)
     def wrapper(request, *args, **kwargs):
-        creator_id = request.db.User.query.filter_by(
+        creator_id = request.db.LocalUser.query.filter_by(
             username=request.matchdict['user']).first().id
         if not (request.user.has_privilege(u'admin') or
                 request.user.id == creator_id):
@@ -177,7 +177,7 @@ def get_user_media_entry(controller):
     """
     @wraps(controller)
     def wrapper(request, *args, **kwargs):
-        user = User.query.filter_by(username=request.matchdict['user']).first()
+        user = LocalUser.query.filter_by(username=request.matchdict['user']).first()
         if not user:
             raise NotFound()
 
@@ -217,7 +217,7 @@ def get_user_collection(controller):
     """
     @wraps(controller)
     def wrapper(request, *args, **kwargs):
-        user = request.db.User.query.filter_by(
+        user = request.db.LocalUser.query.filter_by(
             username=request.matchdict['user']).first()
 
         if not user:
@@ -242,7 +242,7 @@ def get_user_collection_item(controller):
     """
     @wraps(controller)
     def wrapper(request, *args, **kwargs):
-        user = request.db.User.query.filter_by(
+        user = request.db.LocalUser.query.filter_by(
             username=request.matchdict['user']).first()
 
         if not user:
@@ -422,7 +422,7 @@ def oauth_required(controller):
         request.access_token = AccessToken.query.filter_by(token=token).first()
         if request.access_token is not None and request.user is None:
             user_id = request.access_token.user
-            request.user = User.query.filter_by(id=user_id).first()
+            request.user = LocalUser.query.filter_by(id=user_id).first()
 
         return controller(request, *args, **kwargs)
 
index 8cee1cc035bc52397d9617e400e40781395d852d..224b93de1b8a6f61bf33cd4e02a71529d865e32a 100644 (file)
@@ -47,7 +47,7 @@ from mediagoblin.tools.text import (
     convert_to_tag_list_of_dicts, media_tags_as_string)
 from mediagoblin.tools.url import slugify
 from mediagoblin.db.util import check_media_slug_used, check_collection_slug_used
-from mediagoblin.db.models import User, Client, AccessToken, Location
+from mediagoblin.db.models import User, LocalUser, Client, AccessToken, Location
 
 import mimetypes
 
@@ -444,8 +444,9 @@ def change_email(request):
 
     if request.method == 'POST' and form.validate():
         new_email = form.new_email.data
-        users_with_email = User.query.filter_by(
-            email=new_email).count()
+        users_with_email = User.query.filter(
+            LocalUser.email==new_email
+        ).count()
 
         if users_with_email:
             form.new_email.errors.append(
index 2aa8f96a6fa100b6d747a1a4ac74b2595d6c93f7..2c376b76b67db84631e99106277b54b7876c5f59 100644 (file)
@@ -20,6 +20,7 @@ import os
 
 import six
 
+from mediagoblin.db.models import LocalUser
 from mediagoblin.gmg_commands import util as commands_util
 from mediagoblin.submit.lib import (
     submit_media, get_upload_file_limits,
@@ -70,7 +71,9 @@ def addmedia(args):
     app = commands_util.setup_app(args)
 
     # get the user
-    user = app.db.User.query.filter_by(username=args.username.lower()).first()
+    user = app.db.User.query.filter(
+        LocalUser.username==args.username.lower()
+    ).first()
     if user is None:
         print("Sorry, no user by username '%s'" % args.username)
         return
index 5a47d69848b998934d53c389bb28147b105eceda..8012d5e9cbdbfa4d9bf0c938b523b4a735b827d6 100644 (file)
@@ -25,6 +25,7 @@ import six
 
 from six.moves.urllib.parse import urlparse
 
+from mediagoblin.db.models import LocalUser
 from mediagoblin.gmg_commands import util as commands_util
 from mediagoblin.submit.lib import (
     submit_media, get_upload_file_limits,
@@ -64,7 +65,9 @@ def batchaddmedia(args):
     files_uploaded, files_attempted = 0, 0
 
     # get the user
-    user = app.db.User.query.filter_by(username=args.username.lower()).first()
+    user = app.db.User.query.filter(
+        LocalUser.username==args.username.lower()
+    ).first()
     if user is None:
         print(_(u"Sorry, no user by username '{username}' exists".format(
                     username=args.username)))
index 33abc8913dc9f1ad5f2e99bdba5f8950a905e56f..0916308d5195a833b2b445cc91554785de6fd02b 100644 (file)
@@ -20,6 +20,7 @@ import sys
 
 import six
 
+from mediagoblin.db.models import LocalUser
 from mediagoblin.gmg_commands import util as commands_util
 from mediagoblin import auth
 from mediagoblin import mg_globals
@@ -46,8 +47,8 @@ def adduser(args):
 
     db = mg_globals.database
     users_with_username = \
-        db.User.query.filter_by(
-            username=args.username.lower()
+        db.User.query.filter(
+            LocalUser.username==args.username.lower()
         ).count()
 
     if users_with_username:
@@ -56,7 +57,7 @@ def adduser(args):
 
     else:
         # Create the user
-        entry = db.User()
+        entry = db.LocalUser()
         entry.username = six.text_type(args.username.lower())
         entry.email = six.text_type(args.email)
         entry.pw_hash = auth.gen_password_hash(args.password)
@@ -87,8 +88,9 @@ def makeadmin(args):
 
     db = mg_globals.database
 
-    user = db.User.query.filter_by(
-        username=six.text_type(args.username.lower())).one()
+    user = db.User.query.filter(
+        LocalUser.username==six.text_type(args.username.lower())
+    ).one()
     if user:
         user.all_privileges.append(
             db.Privilege.query.filter(
@@ -115,8 +117,9 @@ def changepw(args):
 
     db = mg_globals.database
 
-    user = db.User.query.filter_by(
-        username=six.text_type(args.username.lower())).one()
+    user = db.User.query.filter(
+        LocalUser.username==six.text_type(args.username.lower())
+    ).one()
     if user:
         user.pw_hash = auth.gen_password_hash(args.password)
         user.save()
@@ -138,7 +141,9 @@ def deleteuser(args):
 
     db = mg_globals.database
 
-    user = db.User.query.filter_by(username=args.username.lower()).first()
+    user = db.User.query.filter(
+        LocalUser.username==args.username.lower()
+    ).first()
     if user:
         user.delete()
         print('The user %s has been deleted' % args.username)
index 0b88037ffca9c4b25ef1c3c4d16fb6f9db463946..8feb6a15d5ffebaafd5d012b1b15df12c3933f52 100644 (file)
@@ -46,7 +46,7 @@ from mediagoblin.tools.text import (
     cleaned_markdown_conversion)
 
 from mediagoblin.db.util import check_media_slug_used, check_collection_slug_used
-from mediagoblin.db.models import User, Collection, MediaEntry
+from mediagoblin.db.models import User, Collection, MediaEntry, LocalUser
 
 from mediagoblin.notifications import add_comment_subscription
 
@@ -306,7 +306,9 @@ def blog_delete(request, **kwargs):
     Deletes a blog and media entries, tags associated with it. 
     """
     url_user = request.matchdict.get('user')
-    owner_user = request.db.User.query.filter_by(username=url_user).first()
+    owner_user = request.db.User.query.filter(
+        LocalUser.username==url_user
+    ).first()
 
     blog_slug = request.matchdict.get('blog_slug', None)
     blog = get_blog_by_slug(request, blog_slug, author=owner_user.id)
@@ -355,7 +357,9 @@ def blog_about_view(request):
     blog_slug = request.matchdict.get('blog_slug', None)
     url_user = request.matchdict.get('user', None)
     
-    user = request.db.User.query.filter_by(username=url_user).first() 
+    user = request.db.User.query.filter(
+        LocalUser.username=url_user
+    ).first() 
     blog = get_blog_by_slug(request, blog_slug, author=user.id)
     
     if not user or not blog:
index 0bcd8762a16b9f2ed103cea51d3e6edfe1a0fffd..56ef9449162744e2df363621e10c472f5b37dff1 100644 (file)
@@ -17,7 +17,7 @@
 import six
 
 from mediagoblin import mg_globals
-from mediagoblin.db.models import User, Privilege, UserBan
+from mediagoblin.db.models import User, Privilege, UserBan, LocalUser
 from mediagoblin.db.base import Session
 from mediagoblin.tools.mail import send_email
 from mediagoblin.tools.response import redirect
@@ -123,7 +123,8 @@ def take_away_privileges(user,*privileges):
         privilege = Privilege.query.filter(
             Privilege.privilege_name==privileges[0]).first()
         user = User.query.filter(
-            User.username==user).first()
+            LocalUser.username==user
+        ).first()
         if privilege in user.all_privileges:
             user.all_privileges.remove(privilege)
             return True
@@ -155,7 +156,8 @@ def give_privileges(user,*privileges):
         privilege = Privilege.query.filter(
             Privilege.privilege_name==privileges[0]).first()
         user = User.query.filter(
-            User.username==user).first()
+            LoclUser.username==user
+        ).first()
         if privilege not in user.all_privileges:
             user.all_privileges.append(privilege)
             return True
index f4de11ad8a4d0f6677bcf6a1e5f240150318fa76..b99f4660afdb13e23eaa9edf63710f019b65a003 100644 (file)
@@ -15,8 +15,8 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
-from mediagoblin.db.models import (MediaEntry, User,ReportBase, Privilege,
-                                   UserBan)
+from mediagoblin.db.models import (MediaEntry, User, ReportBase, Privilege,
+                                   UserBan, LocalUser)
 from mediagoblin.decorators import (require_admin_or_moderator_login,
                                     active_user_from_url, user_has_privilege,
                                     allow_reporting)
@@ -79,7 +79,9 @@ def moderation_users_detail(request):
     '''
     Shows details about a particular user.
     '''
-    user = User.query.filter_by(username=request.matchdict['user']).first()
+    user = User.query.filter(
+        LocalUser.username==request.matchdict['user']
+    ).first()
     active_reports = user.reports_filed_on.filter(
         ReportBase.resolved==None).limit(5)
     closed_reports = user.reports_filed_on.filter(
index b495624cac18a0f01626be2a311e5b3b167b0807..12142212b5fd8383e5a0b0e5d32cf44d1e382375 100644 (file)
@@ -16,7 +16,7 @@
 
 import six
 
-from mediagoblin.db.models import MediaEntry, User
+from mediagoblin.db.models import MediaEntry, User, LocalUser
 from mediagoblin.plugins.archivalook.models import FeaturedMedia
 from mediagoblin.tools.translate import lazy_pass_to_ugettext as _
 from mediagoblin.plugins.archivalook.models import FeaturedMedia
@@ -36,10 +36,11 @@ def get_media_entry_from_uploader_slug(uploader_username, slug):
                                         matches the specifications.
     """
     uploader = User.query.filter(
-                User.username == uploader_username).first()
+        LocalUser.username==uploader_username
+    ).first()
     media = MediaEntry.query.filter(
-                MediaEntry.get_uploader == uploader ).filter(
-                MediaEntry.slug == slug).first()
+        MediaEntry.get_uploader == uploader ).filter(
+        MediaEntry.slug == slug).first()
     return media
 
 
@@ -292,4 +293,3 @@ def demote_feature(media_entry):
     elif target_feature.display_type == u'primary':
         target_feature.display_type = u'secondary'
     target_feature.save()
-
index 64564c7ffeaf8fb3003c65ab157c021e5b11fd72..31a4fd95755d612d20d8c384b64c410420ab0a39 100644 (file)
@@ -19,7 +19,7 @@ import os
 from mediagoblin.plugins.basic_auth import forms as auth_forms
 from mediagoblin.plugins.basic_auth import tools as auth_tools
 from mediagoblin.auth.tools import create_basic_user
-from mediagoblin.db.models import User
+from mediagoblin.db.models import LocalUser
 from mediagoblin.tools import pluginapi
 from sqlalchemy import or_
 from mediagoblin.tools.staticdirect import PluginStatic
@@ -56,10 +56,10 @@ def setup_plugin():
 def get_user(**kwargs):
     username = kwargs.pop('username', None)
     if username:
-        user = User.query.filter(
+        user = LocalUser.query.filter(
             or_(
-                User.username == username,
-                User.email == username,
+                LocalUser.username == username,
+                LocalUser.email == username,
             )).first()
         return user
 
index 02d370f096a910b2c8c4661af70cd65b398b26b1..95f91b4c3c81743c54053535dd8a91b8cd16fbb0 100644 (file)
@@ -16,7 +16,7 @@
 from itsdangerous import BadSignature
 
 from mediagoblin import messages
-from mediagoblin.db.models import User
+from mediagoblin.db.models import LocalUser
 from mediagoblin.decorators import require_active_login
 from mediagoblin.plugins.basic_auth import forms, tools
 from mediagoblin.tools.crypto import get_timed_signer_url
@@ -48,7 +48,7 @@ def forgot_password(request):
     found_by_email = '@' in fp_form.username.data
 
     if found_by_email:
-        user = User.query.filter_by(
+        user = LocalUser.query.filter_by(
             email=fp_form.username.data).first()
         # Don't reveal success in case the lookup happened by email address.
         success_message = _("If that email address (case sensitive!) is "
@@ -56,7 +56,7 @@ def forgot_password(request):
                             "instructions on how to change your password.")
 
     else:  # found by username
-        user = User.query.filter_by(
+        user = LocalUser.query.filter_by(
             username=fp_form.username.data).first()
 
         if user is None:
@@ -114,7 +114,7 @@ def verify_forgot_password(request):
             'index')
 
     # check if it's a valid user id
-    user = User.query.filter_by(id=int(token)).first()
+    user = LocalUser.query.filter_by(id=int(token)).first()
 
     # no user in db
     if not user:
index be434daf2afd8cdd880431d8328a83bfece15804..71904d1f23ebc7418c0f65248b26bc49812a63e2 100644 (file)
@@ -18,7 +18,7 @@ import six
 
 from mediagoblin import mg_globals, messages
 from mediagoblin.auth.tools import register_user
-from mediagoblin.db.models import User
+from mediagoblin.db.models import User, LocalUser
 from mediagoblin.decorators import allow_registration, auth_enabled
 from mediagoblin.plugins.ldap import forms
 from mediagoblin.plugins.ldap.tools import LDAP
@@ -38,8 +38,9 @@ def login(request):
                                   login_form.password.data)
 
         if username:
-            user = User.query.filter_by(
-                username=username).first()
+            user = User.query.filter(
+                LocalUser.username==username
+            ).first()
 
             if user:
                 # set up login in session
index ca17a7e8c00d3ee17bf5dbd7677c9a2390c98b4b..b26087a272fec1322587edf6b7b73b4cee9f754b 100644 (file)
@@ -19,7 +19,7 @@ import uuid
 from sqlalchemy import or_
 
 from mediagoblin.auth.tools import create_basic_user
-from mediagoblin.db.models import User
+from mediagoblin.db.models import User, LocalUser
 from mediagoblin.plugins.openid.models import OpenIDUserURL
 from mediagoblin.tools import pluginapi
 from mediagoblin.tools.translate import lazy_pass_to_ugettext as _
@@ -67,8 +67,8 @@ def create_user(register_form):
         username = register_form.username.data
         user = User.query.filter(
             or_(
-                User.username == username,
-                User.email == username,
+                LocalUser.username == username,
+                LocalUser.email == username,
             )).first()
 
         if not user:
index 700c18e2398063ca14777aaf64cbd250d1b9603c..8fab726ae1b6ea7ab699d8b6f83a0d02d5fc9dd9 100644 (file)
@@ -19,7 +19,7 @@ import os
 from sqlalchemy import or_
 
 from mediagoblin.auth.tools import create_basic_user
-from mediagoblin.db.models import User
+from mediagoblin.db.models import User, LocalUser
 from mediagoblin.plugins.persona.models import PersonaUserEmails
 from mediagoblin.tools import pluginapi
 from mediagoblin.tools.staticdirect import PluginStatic
@@ -60,8 +60,8 @@ def create_user(register_form):
         username = register_form.username.data
         user = User.query.filter(
             or_(
-                User.username == username,
-                User.email == username,
+                LocalUser.username == username,
+                LocalUser.email == username,
             )).first()
 
         if not user:
index fbf3fc6c0d41ca1f0f60d15f4bd8628b45527582..ed0653fb661e20b06912fbe3b04138c2f8bab3c5 100644 (file)
@@ -16,7 +16,7 @@
 
 import pytest
 
-from mediagoblin.db.models import User
+from mediagoblin.db.models import User, LocalUser
 from mediagoblin.tests.tools import fixture_add_user
 from mediagoblin.tools import template
 
@@ -44,7 +44,7 @@ class MGClientTestCase:
             fixture_add_user(username, **options)
 
     def user(self, username):
-        return User.query.filter(User.username == username).first()
+        return User.query.filter(LocalUser.username==username).first()
 
     def _do_request(self, url, *context_keys, **kwargs):
         template.clear_test_template_context()
index 5ce6768886de8983209664d92b993df912f965ea..b731ce524af6e42673135ab4570def0f4fbf03da 100644 (file)
@@ -23,7 +23,7 @@ import six
 import six.moves.urllib.parse as urlparse
 
 from mediagoblin import mg_globals
-from mediagoblin.db.models import User
+from mediagoblin.db.models import User, LocalUser
 from mediagoblin.tests.tools import get_app, fixture_add_user
 from mediagoblin.tools import template, mail
 from mediagoblin.auth import tools as auth_tools
@@ -98,8 +98,9 @@ def test_register_views(test_app):
     assert 'mediagoblin/user_pages/user_nonactive.html' in template.TEMPLATE_TEST_CONTEXT
 
     ## Make sure user is in place
-    new_user = mg_globals.database.User.query.filter_by(
-        username=u'angrygirl').first()
+    new_user = mg_globals.database.User.query.filter(
+        LocalUser.usrname==u'angrygirl'
+    ).first()
     assert new_user
 
     ## Make sure that the proper privileges are granted on registration
@@ -137,8 +138,9 @@ def test_register_views(test_app):
 
     # assert context['verification_successful'] == True
     # TODO: Would be good to test messages here when we can do so...
-    new_user = mg_globals.database.User.query.filter_by(
-        username=u'angrygirl').first()
+    new_user = mg_globals.database.User.query.filter(
+        LocalUser.username==u'angrygirl'
+    ).first()
     assert new_user
 
     ## Verify the email activation works
@@ -149,8 +151,9 @@ def test_register_views(test_app):
         'mediagoblin/user_pages/user.html']
     # assert context['verification_successful'] == True
     # TODO: Would be good to test messages here when we can do so...
-    new_user = mg_globals.database.User.query.filter_by(
-        username=u'angrygirl').first()
+    new_user = mg_globals.database.User.query.filter(
+        LocalUser.username==u'angrygirl'
+    ).first()
     assert new_user
 
     # Uniqueness checks
index e7157beec884ed68a0404cc8020337683cb3279a..0d698a20dff4da9d087d9d4d7ac12fa4e045fde9 100644 (file)
@@ -16,7 +16,7 @@
 
 import six.moves.urllib.parse as urlparse
 
-from mediagoblin.db.models import User
+from mediagoblin.db.models import User, LocalUser
 from mediagoblin.plugins.basic_auth import tools as auth_tools
 from mediagoblin.tests.tools import fixture_add_user
 from mediagoblin.tools import template
@@ -88,7 +88,7 @@ def test_change_password(test_app):
         assert urlparse.urlsplit(res.location)[2] == '/edit/account/'
 
         # test_user has to be fetched again in order to have the current values
-        test_user = User.query.filter_by(username=u'chris').first()
+        test_user = User.query.filter(LocalUser.username==u'chris').first()
         assert auth_tools.bcrypt_check_password('123456', test_user.pw_hash)
 
         # test that the password cannot be changed if the given
@@ -100,5 +100,5 @@ def test_change_password(test_app):
                 'new_password': '098765',
                 })
 
-        test_user = User.query.filter_by(username=u'chris').first()
+        test_user = User.query.filter(LocalUser.username==u'chris').first()
         assert not auth_tools.bcrypt_check_password('098765', test_user.pw_hash)
index 384929cb6249fbcddbfff12a88c1ae99396487ce..3bf85edfdb70901848ec2a34e5dcfd9786f5d894 100644 (file)
@@ -19,7 +19,7 @@ import six.moves.urllib.parse as urlparse
 import pytest
 
 from mediagoblin import mg_globals
-from mediagoblin.db.models import User, MediaEntry
+from mediagoblin.db.models import User, LocalUser, MediaEntry
 from mediagoblin.tests.tools import fixture_add_user, fixture_media_entry
 from mediagoblin import auth
 from mediagoblin.tools import template, mail
@@ -44,12 +44,12 @@ class TestUserEdit(object):
         self.login(test_app)
 
         # Make sure user exists
-        assert User.query.filter_by(username=u'chris').first()
+        assert User.query.filter(LocalUser.username=u'chris').first()
 
         res = test_app.post('/edit/account/delete/', {'confirmed': 'y'})
 
         # Make sure user has been deleted
-        assert User.query.filter_by(username=u'chris').first() == None
+        assert User.query.filter(LocalUser.username==u'chris').first() == None
 
         #TODO: make sure all corresponding items comments etc have been
         # deleted too. Perhaps in submission test?
@@ -79,7 +79,7 @@ class TestUserEdit(object):
                 'bio': u'I love toast!',
                 'url': u'http://dustycloud.org/'})
 
-        test_user = User.query.filter_by(username=u'chris').first()
+        test_user = User.query.filter(LocalUser.username==u'chris').first()
         assert test_user.bio == u'I love toast!'
         assert test_user.url == u'http://dustycloud.org/'
 
@@ -159,9 +159,10 @@ class TestUserEdit(object):
         assert urlparse.urlsplit(res.location)[2] == '/'
 
         # Email shouldn't be saved
-        email_in_db = mg_globals.database.User.query.filter_by(
-            email='new@example.com').first()
-        email = User.query.filter_by(username='chris').first().email
+        email_in_db = mg_globals.database.User.query.filter(
+            LocalUser.email=='new@example.com'
+        ).first()
+        email = User.query.filter(LocalUser.username=='chris').first().email
         assert email_in_db is None
         assert email == 'chris@example.com'
 
@@ -172,7 +173,7 @@ class TestUserEdit(object):
         res.follow()
 
         # New email saved?
-        email = User.query.filter_by(username='chris').first().email
+        email = User.query.filter(LocalUser.username=='chris').first().email
         assert email == 'new@example.com'
 # test changing the url inproperly
 
@@ -181,8 +182,10 @@ class TestMetaDataEdit:
     def setup(self, test_app):
         # set up new user
         self.user_password = u'toast'
-        self.user = fixture_add_user(password = self.user_password,
-                               privileges=[u'active',u'admin'])
+        self.user = fixture_add_user(
+            password = self.user_password,
+            privileges=[u'active',u'admin']
+        )
         self.test_app = test_app
 
     def login(self, test_app):
index f251d150092ad178f75eb7bedac201a1bd11a69d..827864fa915a74fff29bb6126bfe6a162bd85dbc 100644 (file)
@@ -26,6 +26,7 @@ import six.moves.urllib.parse as urlparse
 
 from mediagoblin import mg_globals
 from mediagoblin.db.base import Session
+from mediagoblin.db.models import LocalUser
 from mediagoblin.tests.tools import get_app
 from mediagoblin.tools import template
 
@@ -114,8 +115,9 @@ def test_ldap_plugin(ldap_plugin_app):
         ldap_plugin_app.get('/auth/logout/')
 
         # Get user and detach from session
-        test_user = mg_globals.database.User.query.filter_by(
-            username=u'chris').first()
+        test_user = mg_globals.database.User.query.filter(
+            LocalUser.username==u'chris'
+        ).first()
         Session.expunge(test_user)
 
         # Log back in
index 0706aae437ede7b1c0f642ed30679c4ef2ce4566..78b29892166d9b776aad453af6bfea9f8fdf2804 100644 (file)
@@ -20,8 +20,8 @@
 from __future__ import print_function
 
 from mediagoblin.db.base import Session
-from mediagoblin.db.models import MediaEntry, User, Privilege, Activity, \
-                                  Generator
+from mediagoblin.db.models import MediaEntry, User, LocalUser, Privilege, \
+                                  Activity, Generator
 
 from mediagoblin.tests import MGClientTestCase
 from mediagoblin.tests.tools import fixture_add_user, fixture_media_entry, \
@@ -169,9 +169,9 @@ class TestUserHasPrivilege:
         fixture_add_user(u'aeva',
             privileges=[u'moderator',u'active'])
         self.natalie_user = User.query.filter(
-            User.username==u'natalie').first()
+            LocalUser.username==u'natalie').first()
         self.aeva_user = User.query.filter(
-            User.username==u'aeva').first()
+            LocalUser.username==u'aeva').first()
 
     def test_privilege_added_correctly(self, test_app):
         self._setup()
index e7a0ebef6e2e1fccc0d89397b0494dc645ee32fa..46de6ed977b8b047608f85a31cf72a4c47637536 100644 (file)
@@ -18,7 +18,7 @@ import pytest
 
 from mediagoblin.tests.tools import (fixture_add_user,
             fixture_add_comment_report, fixture_add_comment)
-from mediagoblin.db.models import User, CommentReport, MediaComment, UserBan
+from mediagoblin.db.models import User, LocalUser, CommentReport, MediaComment, UserBan
 from mediagoblin.tools import template, mail
 from webtest import AppError
 
@@ -47,9 +47,9 @@ class TestModerationViews:
         self.query_for_users()
 
     def query_for_users(self):
-        self.admin_user = User.query.filter(User.username==u'admin').first()
-        self.mod_user = User.query.filter(User.username==u'moderator').first()
-        self.user = User.query.filter(User.username==u'regular').first()
+        self.admin_user = User.query.filter(LocalUser.username==u'admin').first()
+        self.mod_user = User.query.filter(LocalUser.username==u'moderator').first()
+        self.user = User.query.filter(LocalUser.username==u'regular').first()
 
     def do_post(self, data, *context_keys, **kwargs):
         url = kwargs.pop('url', '/submit/')
index a3ab176ad0606826fe2cfed67f8d7085a4a606f6..409fcea26c263b03fcc84ba2baef8eb05d1a6e2d 100644 (file)
@@ -28,7 +28,7 @@ openid_consumer = pytest.importorskip(
 
 from mediagoblin import mg_globals
 from mediagoblin.db.base import Session
-from mediagoblin.db.models import User
+from mediagoblin.db.models import User, LocalUser
 from mediagoblin.plugins.openid.models import OpenIDUserURL
 from mediagoblin.tests.tools import get_app, fixture_add_user
 from mediagoblin.tools import template
@@ -192,8 +192,9 @@ class TestOpenIDPlugin(object):
             openid_plugin_app.get('/auth/logout')
 
             # Get user and detach from session
-            test_user = mg_globals.database.User.query.filter_by(
-                username=u'chris').first()
+            test_user = mg_globals.database.User.query.filter(
+                LocalUser.username==u'chris'
+            ).first()
             Session.expunge(test_user)
 
             # Log back in
index a8466b8a13a893852de3a236f2f372849f14b033..6112430f2ca4d9801dfa8c3f8aaeac0d223254ae 100644 (file)
@@ -27,7 +27,7 @@ import six.moves.urllib.parse as urlparse
 pytest.importorskip("requests")
 
 from mediagoblin import mg_globals
-from mediagoblin.db.base import Session
+from mediagoblin.db.base import Session, LocalUser
 from mediagoblin.db.models import Privilege
 from mediagoblin.tests.tools import get_app
 from mediagoblin.tools import template
@@ -117,14 +117,16 @@ class TestPersonaPlugin(object):
             persona_plugin_app.get('/auth/logout/')
 
             # Get user and detach from session
-            test_user = mg_globals.database.User.query.filter_by(
-                username=u'chris').first()
+            test_user = mg_globals.database.User.query.filter(
+                LocalUser.username==u'chris'
+            ).first()
             active_privilege = Privilege.query.filter(
                 Privilege.privilege_name==u'active').first()
             test_user.all_privileges.append(active_privilege)
             test_user.save()
-            test_user = mg_globals.database.User.query.filter_by(
-                username=u'chris').first()
+            test_user = mg_globals.database.User.query.filter(
+                LocalUser.username==u'chris'
+            ).first()
             Session.expunge(test_user)
 
             # Add another user for _test_edit_persona
index 8ea3d7549497a8bca2b1b5c57bfec29e931c9b89..b3383b25ec93f0c1949e481722dccaddb66ede0a 100644 (file)
@@ -21,7 +21,7 @@ from webtest import AppError
 
 from mediagoblin.tests.tools import fixture_add_user, fixture_media_entry
 
-from mediagoblin.db.models import User, UserBan
+from mediagoblin.db.models import User, LocalUser, UserBan
 from mediagoblin.tools import template
 
 from .resources import GOOD_JPG
@@ -64,9 +64,9 @@ class TestPrivilegeFunctionality:
         return response, context_data
 
     def query_for_users(self):
-        self.admin_user = User.query.filter(User.username==u'alex').first()
-        self.mod_user = User.query.filter(User.username==u'meow').first()
-        self.user = User.query.filter(User.username==u'natalie').first()
+        self.admin_user = User.query.filter(LocalUser.username==u'alex').first()
+        self.mod_user = User.query.filter(LocalUser.username==u'meow').first()
+        self.user = User.query.filter(LocalUser.username==u'natalie').first()
 
     def testUserBanned(self):
         self.login(u'natalie')
index 6a9fe205ffde0ad828461810bf111cbb7e72b19f..8b7f65591b51384eee0234ca43d01884de078e23 100644 (file)
@@ -20,7 +20,7 @@ import six
 from mediagoblin.tools import template
 from mediagoblin.tests.tools import (fixture_add_user, fixture_media_entry,
         fixture_add_comment, fixture_add_comment_report)
-from mediagoblin.db.models import (MediaReport, CommentReport, User,
+from mediagoblin.db.models import (MediaReport, CommentReport, User, LocalUser
     MediaComment)
 
 
@@ -56,8 +56,8 @@ class TestReportFiling:
         return response, context_data
 
     def query_for_users(self):
-        return (User.query.filter(User.username==u'allie').first(),
-        User.query.filter(User.username==u'natalie').first())
+        return (User.query.filter(LocalUser.username==u'allie').first(),
+        User.query.filter(LocalUser.username==u'natalie').first())
 
     def testMediaReports(self):
         self.login(u'allie')
index 65c4b3a32abdd11068adfe9c9679f444a472f640..b5ec3d71d3716c6fe6d2c1804e6469da4ac9e879 100644 (file)
@@ -35,7 +35,7 @@ Gst.init(None)
 from mediagoblin.tests.tools import fixture_add_user
 from .media_tools import create_av
 from mediagoblin import mg_globals
-from mediagoblin.db.models import MediaEntry, User
+from mediagoblin.db.models import MediaEntry, User, LocalUser
 from mediagoblin.db.base import Session
 from mediagoblin.tools import template
 from mediagoblin.media_types.image import ImageMediaManager
@@ -72,7 +72,7 @@ class TestSubmission:
         ####   totally stupid.
         ####   Also if we found a way to make this run it should be a
         ####   property.
-        return User.query.filter(User.username==u'chris').first()
+        return User.query.filter(LocalUser.username==u'chris').first()
 
     def login(self):
         self.test_app.post(
index dec95e83bda619f2e92461145de1687534969c89..76b7983a36c2e66884cd47705a71a6feebff6e05 100644 (file)
@@ -25,7 +25,7 @@ from paste.deploy import loadapp
 from webtest import TestApp
 
 from mediagoblin import mg_globals
-from mediagoblin.db.models import User, MediaEntry, Collection, MediaComment, \
+from mediagoblin.db.models import User, LocalUser, MediaEntry, Collection, MediaComment, \
     CommentSubscription, CommentNotification, Privilege, CommentReport, Client, \
     RequestToken, AccessToken, Activity, Generator
 from mediagoblin.tools import testing
@@ -176,9 +176,9 @@ def assert_db_meets_expected(db, expected):
 def fixture_add_user(username=u'chris', password=u'toast',
                      privileges=[], wants_comment_notification=True):
     # Reuse existing user or create a new one
-    test_user = User.query.filter_by(username=username).first()
+    test_user = User.query.filter(LocalUser.username==username).first()
     if test_user is None:
-        test_user = User()
+        test_user = LocalUser()
     test_user.username = username
     test_user.email = username + u'@example.com'
     if password is not None:
@@ -191,7 +191,7 @@ def fixture_add_user(username=u'chris', password=u'toast',
 
     test_user.save()
     # Reload
-    test_user = User.query.filter_by(username=username).first()
+    test_user = User.query.filter(LocalUser.username==username).first()
 
     # ... and detach from session:
     Session.expunge(test_user)
index 39b465bf738b5e86f5fc3bc8100db7b9799adf81..f2ee468cbb57caca86f7b948a6762329d4310a17 100644 (file)
@@ -83,7 +83,6 @@ def create_activity(verb, obj, actor, target=None, generator=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()
 
index cc7f3684f5020063a1c6e687bc12e401175517d7..33ca7c40bc9cc8f1bd34fea6e0f823c3ef827eb7 100644 (file)
@@ -22,7 +22,7 @@ import six
 
 from mediagoblin import messages, mg_globals
 from mediagoblin.db.models import (MediaEntry, MediaTag, Collection,
-                                   CollectionItem, User, Activity)
+                                   CollectionItem, LocalUser, Activity)
 from mediagoblin.tools.response import render_to_response, render_404, \
     redirect, redirect_obj
 from mediagoblin.tools.text import cleaned_markdown_conversion
@@ -53,8 +53,8 @@ _log.setLevel(logging.DEBUG)
 @user_not_banned
 @uses_pagination
 def user_home(request, page):
-    """'Homepage' of a User()"""
-    user = User.query.filter_by(username=request.matchdict['user']).first()
+    """'Homepage' of a LocalUser()"""
+    user = LocalUser.query.filter_by(username=request.matchdict['user']).first()
     if not user:
         return render_404(request)
     elif not user.has_privilege(u'active'):
@@ -90,7 +90,7 @@ def user_home(request, page):
 @active_user_from_url
 @uses_pagination
 def user_gallery(request, page, url_user=None):
-    """'Gallery' of a User()"""
+    """'Gallery' of a LocalUser()"""
     tag = request.matchdict.get('tag', None)
     cursor = MediaEntry.query.filter_by(
         uploader=url_user.id,
@@ -485,7 +485,7 @@ def atom_feed(request):
     """
     generates the atom feed with the newest images
     """
-    user = User.query.filter_by(
+    user = LocalUser.query.filter_by(
         username = request.matchdict['user']).first()
     if not user or not user.has_privilege(u'active'):
         return render_404(request)
@@ -547,7 +547,7 @@ def collection_atom_feed(request):
     """
     generates the atom feed with the newest images from a collection
     """
-    user = User.query.filter_by(
+    user = LocalUser.query.filter_by(
         username = request.matchdict['user']).first()
     if not user or not user.has_privilege(u'active'):
         return render_404(request)
@@ -617,7 +617,7 @@ def processing_panel(request):
     Show to the user what media is still in conversion/processing...
     and what failed, and why!
     """
-    user = User.query.filter_by(username=request.matchdict['user']).first()
+    user = LocalUser.query.filter_by(username=request.matchdict['user']).first()
     # TODO: XXX: Should this be a decorator?
     #
     # Make sure we have permission to access this user's panel.  Only
@@ -705,7 +705,7 @@ def activity_view(request):
     """
     # Get the user object.
     username = request.matchdict["username"]
-    user = User.query.filter_by(username=username).first()
+    user = LocalUser.query.filter_by(username=username).first()
 
     activity_id = request.matchdict["id"]