aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mediagoblin/api/views.py10
-rw-r--r--mediagoblin/db/migrations.py3
-rw-r--r--mediagoblin/db/mixin.py6
-rw-r--r--mediagoblin/db/models.py43
-rw-r--r--mediagoblin/gmg_commands/addmedia.py4
-rw-r--r--mediagoblin/gmg_commands/batchaddmedia.py2
-rw-r--r--mediagoblin/gmg_commands/users.py8
-rw-r--r--mediagoblin/media_types/blog/views.py8
-rw-r--r--mediagoblin/moderation/tools.py6
-rw-r--r--mediagoblin/moderation/views.py2
-rw-r--r--mediagoblin/plugins/archivalook/tools.py2
-rw-r--r--mediagoblin/plugins/ldap/views.py2
-rw-r--r--mediagoblin/tests/__init__.py2
-rw-r--r--mediagoblin/tests/test_auth.py8
-rw-r--r--mediagoblin/tests/test_basic_auth.py4
-rw-r--r--mediagoblin/tests/test_edit.py12
-rw-r--r--mediagoblin/tests/test_ldap.py2
-rw-r--r--mediagoblin/tests/test_modelmethods.py4
-rw-r--r--mediagoblin/tests/test_moderation.py6
-rw-r--r--mediagoblin/tests/test_openid.py2
-rw-r--r--mediagoblin/tests/test_persona.py8
-rw-r--r--mediagoblin/tests/test_privileges.py6
-rw-r--r--mediagoblin/tests/test_reporting.py6
-rw-r--r--mediagoblin/tests/test_submission.py2
-rw-r--r--mediagoblin/tests/tools.py11
25 files changed, 87 insertions, 82 deletions
diff --git a/mediagoblin/api/views.py b/mediagoblin/api/views.py
index 35f8405c..9c2876c2 100644
--- a/mediagoblin/api/views.py
+++ b/mediagoblin/api/views.py
@@ -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(LocalUser.username==username).first()
+ user = LocalUser.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(LocalUser.username==username).first()
+ requested_user = LocalUser.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(LocalUser.username==username).first()
+ user = LocalUser.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(LocalUser.username==username).first()
+ requested_user = LocalUser.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(LocalUser.username==username).first()
+ user = LocalUser.query.filter(LocalUser.username==username).first()
if user is None:
return json_error(
diff --git a/mediagoblin/db/migrations.py b/mediagoblin/db/migrations.py
index d6806813..ce7174da 100644
--- a/mediagoblin/db/migrations.py
+++ b/mediagoblin/db/migrations.py
@@ -38,7 +38,8 @@ from mediagoblin.db.extratypes import JSONEncoded, MutationDict
from mediagoblin.db.migration_tools import (
RegisterMigration, inspect_table, replace_table_hack)
from mediagoblin.db.models import (MediaEntry, Collection, MediaComment, User,
- Privilege, Generator, LocalUser, Location)
+ Privilege, Generator, LocalUser, Location,
+ Client, RequestToken, AccessToken)
from mediagoblin.db.extratypes import JSONEncoded, MutationDict
diff --git a/mediagoblin/db/mixin.py b/mediagoblin/db/mixin.py
index 07e1fe97..b954ab90 100644
--- a/mediagoblin/db/mixin.py
+++ b/mediagoblin/db/mixin.py
@@ -451,8 +451,8 @@ class ActivityMixin(object):
"audio": _("audio"),
"person": _("a person"),
}
- obj = self.object
- target = None if self.target is None else self.target
+ obj = self.object()
+ target = None if self.target_id is None else self.target()
actor = self.get_actor
content = verb_to_content.get(self.verb, None)
@@ -470,7 +470,7 @@ class ActivityMixin(object):
# Do we want to add a target (indirect object) to content?
if target is not None and "targetted" in content:
if hasattr(target, "title") and target.title.strip(" "):
- target_value = terget.title
+ target_value = target.title
elif target.object_type in object_map:
target_value = object_map[target.object_type]
else:
diff --git a/mediagoblin/db/models.py b/mediagoblin/db/models.py
index f1449667..8c8e42e5 100644
--- a/mediagoblin/db/models.py
+++ b/mediagoblin/db/models.py
@@ -250,9 +250,29 @@ class User(Base, UserMixin):
__mapper_args__ = {
'polymorphic_identity': 'user',
- 'polymorphic_on': type
+ 'polymorphic_on': type,
}
+ def delete(self, **kwargs):
+ """Deletes a User and all related entries/comments/files/..."""
+ # Collections get deleted by relationships.
+
+ media_entries = MediaEntry.query.filter(MediaEntry.uploader == self.id)
+ for media in media_entries:
+ # TODO: Make sure that "MediaEntry.delete()" also deletes
+ # all related files/Comments
+ media.delete(del_orphan_tags=False, commit=False)
+
+ # Delete now unused tags
+ # TODO: import here due to cyclic imports!!! This cries for refactoring
+ from mediagoblin.db.util import clean_orphan_tags
+ clean_orphan_tags(commit=False)
+
+ # Delete user, pass through commit=False/True in kwargs
+ username = self.username
+ super(User, self).delete(**kwargs)
+ _log.info('Deleted user "{0}" account'.format(username))
+
def has_privilege(self, privilege, allow_admin=True):
"""
This method checks to make sure a user has all the correct privileges
@@ -335,7 +355,7 @@ class LocalUser(User):
upload_limit = Column(Integer)
__mapper_args__ = {
- 'polymorphic_identity': 'user_local'
+ "polymorphic_identity": "user_local",
}
## TODO
@@ -349,25 +369,6 @@ class LocalUser(User):
'admin' if self.has_privilege(u'admin') else 'user',
self.username)
- def delete(self, **kwargs):
- """Deletes a User and all related entries/comments/files/..."""
- # Collections get deleted by relationships.
-
- media_entries = MediaEntry.query.filter(MediaEntry.uploader == self.id)
- for media in media_entries:
- # TODO: Make sure that "MediaEntry.delete()" also deletes
- # all related files/Comments
- media.delete(del_orphan_tags=False, commit=False)
-
- # Delete now unused tags
- # TODO: import here due to cyclic imports!!! This cries for refactoring
- from mediagoblin.db.util import clean_orphan_tags
- clean_orphan_tags(commit=False)
-
- # Delete user, pass through commit=False/True in kwargs
- super(User, self).delete(**kwargs)
- _log.info('Deleted user "{0}" account'.format(self.username))
-
def serialize(self, request):
user = {
"id": "acct:{0}@{1}".format(self.username, request.host),
diff --git a/mediagoblin/gmg_commands/addmedia.py b/mediagoblin/gmg_commands/addmedia.py
index 2c376b76..8cbfc806 100644
--- a/mediagoblin/gmg_commands/addmedia.py
+++ b/mediagoblin/gmg_commands/addmedia.py
@@ -71,13 +71,13 @@ def addmedia(args):
app = commands_util.setup_app(args)
# get the user
- user = app.db.User.query.filter(
+ user = app.db.LocalUser.query.filter(
LocalUser.username==args.username.lower()
).first()
if user is None:
print("Sorry, no user by username '%s'" % args.username)
return
-
+
# check for the file, if it exists...
filename = os.path.split(args.filename)[-1]
abs_filename = os.path.abspath(args.filename)
diff --git a/mediagoblin/gmg_commands/batchaddmedia.py b/mediagoblin/gmg_commands/batchaddmedia.py
index 8012d5e9..ed733b9e 100644
--- a/mediagoblin/gmg_commands/batchaddmedia.py
+++ b/mediagoblin/gmg_commands/batchaddmedia.py
@@ -65,7 +65,7 @@ def batchaddmedia(args):
files_uploaded, files_attempted = 0, 0
# get the user
- user = app.db.User.query.filter(
+ user = app.db.LocalUser.query.filter(
LocalUser.username==args.username.lower()
).first()
if user is None:
diff --git a/mediagoblin/gmg_commands/users.py b/mediagoblin/gmg_commands/users.py
index 0916308d..54c4ec94 100644
--- a/mediagoblin/gmg_commands/users.py
+++ b/mediagoblin/gmg_commands/users.py
@@ -47,7 +47,7 @@ def adduser(args):
db = mg_globals.database
users_with_username = \
- db.User.query.filter(
+ db.LocalUser.query.filter(
LocalUser.username==args.username.lower()
).count()
@@ -88,7 +88,7 @@ def makeadmin(args):
db = mg_globals.database
- user = db.User.query.filter(
+ user = db.LocalUser.query.filter(
LocalUser.username==six.text_type(args.username.lower())
).one()
if user:
@@ -117,7 +117,7 @@ def changepw(args):
db = mg_globals.database
- user = db.User.query.filter(
+ user = db.LocalUser.query.filter(
LocalUser.username==six.text_type(args.username.lower())
).one()
if user:
@@ -141,7 +141,7 @@ def deleteuser(args):
db = mg_globals.database
- user = db.User.query.filter(
+ user = db.LocalUser.query.filter(
LocalUser.username==args.username.lower()
).first()
if user:
diff --git a/mediagoblin/media_types/blog/views.py b/mediagoblin/media_types/blog/views.py
index 8feb6a15..b4f4fbc8 100644
--- a/mediagoblin/media_types/blog/views.py
+++ b/mediagoblin/media_types/blog/views.py
@@ -298,15 +298,15 @@ def draft_view(request):
{'blogpost':blogpost,
'blog': blog
})
-
-
+
+
@require_active_login
def blog_delete(request, **kwargs):
"""
- Deletes a blog and media entries, tags associated with it.
+ Deletes a blog and media entries, tags associated with it.
"""
url_user = request.matchdict.get('user')
- owner_user = request.db.User.query.filter(
+ owner_user = request.db.LocalUser.query.filter(
LocalUser.username==url_user
).first()
diff --git a/mediagoblin/moderation/tools.py b/mediagoblin/moderation/tools.py
index 56ef9449..d1fedb0e 100644
--- a/mediagoblin/moderation/tools.py
+++ b/mediagoblin/moderation/tools.py
@@ -122,7 +122,7 @@ def take_away_privileges(user,*privileges):
if len(privileges) == 1:
privilege = Privilege.query.filter(
Privilege.privilege_name==privileges[0]).first()
- user = User.query.filter(
+ user = LocalUser.query.filter(
LocalUser.username==user
).first()
if privilege in user.all_privileges:
@@ -155,8 +155,8 @@ def give_privileges(user,*privileges):
if len(privileges) == 1:
privilege = Privilege.query.filter(
Privilege.privilege_name==privileges[0]).first()
- user = User.query.filter(
- LoclUser.username==user
+ user = LocalUser.query.filter(
+ LocalUser.username==user
).first()
if privilege not in user.all_privileges:
user.all_privileges.append(privilege)
diff --git a/mediagoblin/moderation/views.py b/mediagoblin/moderation/views.py
index b99f4660..a73537d6 100644
--- a/mediagoblin/moderation/views.py
+++ b/mediagoblin/moderation/views.py
@@ -79,7 +79,7 @@ def moderation_users_detail(request):
'''
Shows details about a particular user.
'''
- user = User.query.filter(
+ user = LocalUser.query.filter(
LocalUser.username==request.matchdict['user']
).first()
active_reports = user.reports_filed_on.filter(
diff --git a/mediagoblin/plugins/archivalook/tools.py b/mediagoblin/plugins/archivalook/tools.py
index e806e4ee..fb5673e1 100644
--- a/mediagoblin/plugins/archivalook/tools.py
+++ b/mediagoblin/plugins/archivalook/tools.py
@@ -34,7 +34,7 @@ def get_media_entry_from_uploader_slug(uploader_username, slug):
:returns media A MediaEntry object or None if no entry
matches the specifications.
"""
- uploader = User.query.filter(
+ uploader = LocalUser.query.filter(
LocalUser.username==uploader_username
).first()
media = MediaEntry.query.filter(
diff --git a/mediagoblin/plugins/ldap/views.py b/mediagoblin/plugins/ldap/views.py
index 71904d1f..e10c7f60 100644
--- a/mediagoblin/plugins/ldap/views.py
+++ b/mediagoblin/plugins/ldap/views.py
@@ -38,7 +38,7 @@ def login(request):
login_form.password.data)
if username:
- user = User.query.filter(
+ user = LocalUser.query.filter(
LocalUser.username==username
).first()
diff --git a/mediagoblin/tests/__init__.py b/mediagoblin/tests/__init__.py
index ed0653fb..651dac24 100644
--- a/mediagoblin/tests/__init__.py
+++ b/mediagoblin/tests/__init__.py
@@ -44,7 +44,7 @@ class MGClientTestCase:
fixture_add_user(username, **options)
def user(self, username):
- return User.query.filter(LocalUser.username==username).first()
+ return LocalUser.query.filter(LocalUser.username==username).first()
def _do_request(self, url, *context_keys, **kwargs):
template.clear_test_template_context()
diff --git a/mediagoblin/tests/test_auth.py b/mediagoblin/tests/test_auth.py
index b731ce52..62f77f74 100644
--- a/mediagoblin/tests/test_auth.py
+++ b/mediagoblin/tests/test_auth.py
@@ -98,8 +98,8 @@ 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(
- LocalUser.usrname==u'angrygirl'
+ new_user = mg_globals.database.LocalUser.query.filter(
+ LocalUser.username==u'angrygirl'
).first()
assert new_user
@@ -138,7 +138,7 @@ 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(
+ new_user = mg_globals.database.LocalUser.query.filter(
LocalUser.username==u'angrygirl'
).first()
assert new_user
@@ -151,7 +151,7 @@ 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(
+ new_user = mg_globals.database.LocalUser.query.filter(
LocalUser.username==u'angrygirl'
).first()
assert new_user
diff --git a/mediagoblin/tests/test_basic_auth.py b/mediagoblin/tests/test_basic_auth.py
index 0d698a20..3a42e407 100644
--- a/mediagoblin/tests/test_basic_auth.py
+++ b/mediagoblin/tests/test_basic_auth.py
@@ -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(LocalUser.username==u'chris').first()
+ test_user = LocalUser.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(LocalUser.username==u'chris').first()
+ test_user = LocalUser.query.filter(LocalUser.username==u'chris').first()
assert not auth_tools.bcrypt_check_password('098765', test_user.pw_hash)
diff --git a/mediagoblin/tests/test_edit.py b/mediagoblin/tests/test_edit.py
index 3bf85edf..632c8e3c 100644
--- a/mediagoblin/tests/test_edit.py
+++ b/mediagoblin/tests/test_edit.py
@@ -44,12 +44,12 @@ class TestUserEdit(object):
self.login(test_app)
# Make sure user exists
- assert User.query.filter(LocalUser.username=u'chris').first()
+ assert LocalUser.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(LocalUser.username==u'chris').first() == None
+ assert LocalUser.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(LocalUser.username==u'chris').first()
+ test_user = LocalUser.query.filter(LocalUser.username==u'chris').first()
assert test_user.bio == u'I love toast!'
assert test_user.url == u'http://dustycloud.org/'
@@ -159,10 +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(
+ email_in_db = mg_globals.database.LocalUser.query.filter(
LocalUser.email=='new@example.com'
).first()
- email = User.query.filter(LocalUser.username=='chris').first().email
+ email = LocalUser.query.filter(LocalUser.username=='chris').first().email
assert email_in_db is None
assert email == 'chris@example.com'
@@ -173,7 +173,7 @@ class TestUserEdit(object):
res.follow()
# New email saved?
- email = User.query.filter(LocalUser.username=='chris').first().email
+ email = LocalUser.query.filter(LocalUser.username=='chris').first().email
assert email == 'new@example.com'
# test changing the url inproperly
diff --git a/mediagoblin/tests/test_ldap.py b/mediagoblin/tests/test_ldap.py
index 827864fa..6ac0fc46 100644
--- a/mediagoblin/tests/test_ldap.py
+++ b/mediagoblin/tests/test_ldap.py
@@ -115,7 +115,7 @@ 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(
+ test_user = mg_globals.database.LocalUser.query.filter(
LocalUser.username==u'chris'
).first()
Session.expunge(test_user)
diff --git a/mediagoblin/tests/test_modelmethods.py b/mediagoblin/tests/test_modelmethods.py
index 78b29892..9e0d017c 100644
--- a/mediagoblin/tests/test_modelmethods.py
+++ b/mediagoblin/tests/test_modelmethods.py
@@ -168,9 +168,9 @@ class TestUserHasPrivilege:
privileges=[u'admin',u'moderator',u'active'])
fixture_add_user(u'aeva',
privileges=[u'moderator',u'active'])
- self.natalie_user = User.query.filter(
+ self.natalie_user = LocalUser.query.filter(
LocalUser.username==u'natalie').first()
- self.aeva_user = User.query.filter(
+ self.aeva_user = LocalUser.query.filter(
LocalUser.username==u'aeva').first()
def test_privilege_added_correctly(self, test_app):
diff --git a/mediagoblin/tests/test_moderation.py b/mediagoblin/tests/test_moderation.py
index 46de6ed9..1b071723 100644
--- a/mediagoblin/tests/test_moderation.py
+++ b/mediagoblin/tests/test_moderation.py
@@ -47,9 +47,9 @@ class TestModerationViews:
self.query_for_users()
def query_for_users(self):
- 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()
+ self.admin_user = LocalUser.query.filter(LocalUser.username==u'admin').first()
+ self.mod_user = LocalUser.query.filter(LocalUser.username==u'moderator').first()
+ self.user = LocalUser.query.filter(LocalUser.username==u'regular').first()
def do_post(self, data, *context_keys, **kwargs):
url = kwargs.pop('url', '/submit/')
diff --git a/mediagoblin/tests/test_openid.py b/mediagoblin/tests/test_openid.py
index 409fcea2..71767032 100644
--- a/mediagoblin/tests/test_openid.py
+++ b/mediagoblin/tests/test_openid.py
@@ -192,7 +192,7 @@ class TestOpenIDPlugin(object):
openid_plugin_app.get('/auth/logout')
# Get user and detach from session
- test_user = mg_globals.database.User.query.filter(
+ test_user = mg_globals.database.LocalUser.query.filter(
LocalUser.username==u'chris'
).first()
Session.expunge(test_user)
diff --git a/mediagoblin/tests/test_persona.py b/mediagoblin/tests/test_persona.py
index 6112430f..437cb7a1 100644
--- a/mediagoblin/tests/test_persona.py
+++ b/mediagoblin/tests/test_persona.py
@@ -27,8 +27,8 @@ import six.moves.urllib.parse as urlparse
pytest.importorskip("requests")
from mediagoblin import mg_globals
-from mediagoblin.db.base import Session, LocalUser
-from mediagoblin.db.models import Privilege
+from mediagoblin.db.base import Session
+from mediagoblin.db.models import Privilege, LocalUser
from mediagoblin.tests.tools import get_app
from mediagoblin.tools import template
@@ -117,14 +117,14 @@ class TestPersonaPlugin(object):
persona_plugin_app.get('/auth/logout/')
# Get user and detach from session
- test_user = mg_globals.database.User.query.filter(
+ test_user = mg_globals.database.LocalUser.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(
+ test_user = mg_globals.database.LocalUser.query.filter(
LocalUser.username==u'chris'
).first()
Session.expunge(test_user)
diff --git a/mediagoblin/tests/test_privileges.py b/mediagoblin/tests/test_privileges.py
index b3383b25..2e0b7347 100644
--- a/mediagoblin/tests/test_privileges.py
+++ b/mediagoblin/tests/test_privileges.py
@@ -64,9 +64,9 @@ class TestPrivilegeFunctionality:
return response, context_data
def query_for_users(self):
- 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()
+ self.admin_user = LocalUser.query.filter(LocalUser.username==u'alex').first()
+ self.mod_user = LocalUser.query.filter(LocalUser.username==u'meow').first()
+ self.user = LocalUser.query.filter(LocalUser.username==u'natalie').first()
def testUserBanned(self):
self.login(u'natalie')
diff --git a/mediagoblin/tests/test_reporting.py b/mediagoblin/tests/test_reporting.py
index 8b7f6559..1f4573cf 100644
--- a/mediagoblin/tests/test_reporting.py
+++ b/mediagoblin/tests/test_reporting.py
@@ -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, LocalUser
+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(LocalUser.username==u'allie').first(),
- User.query.filter(LocalUser.username==u'natalie').first())
+ return (LocalUser.query.filter(LocalUser.username==u'allie').first(),
+ LocalUser.query.filter(LocalUser.username==u'natalie').first())
def testMediaReports(self):
self.login(u'allie')
diff --git a/mediagoblin/tests/test_submission.py b/mediagoblin/tests/test_submission.py
index b5ec3d71..55394670 100644
--- a/mediagoblin/tests/test_submission.py
+++ b/mediagoblin/tests/test_submission.py
@@ -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(LocalUser.username==u'chris').first()
+ return LocalUser.query.filter(LocalUser.username==u'chris').first()
def login(self):
self.test_app.post(
diff --git a/mediagoblin/tests/tools.py b/mediagoblin/tests/tools.py
index 76b7983a..6c974c39 100644
--- a/mediagoblin/tests/tools.py
+++ b/mediagoblin/tests/tools.py
@@ -176,7 +176,7 @@ 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(LocalUser.username==username).first()
+ test_user = LocalUser.query.filter(LocalUser.username==username).first()
if test_user is None:
test_user = LocalUser()
test_user.username = username
@@ -190,8 +190,11 @@ def fixture_add_user(username=u'chris', password=u'toast',
test_user.all_privileges.append(query.one())
test_user.save()
- # Reload
- test_user = User.query.filter(LocalUser.username==username).first()
+
+ # Reload - The `with_polymorphic` needs to be there to eagerly load
+ # the attributes on the LocalUser as this can't be done post detachment.
+ user_query = LocalUser.query.with_polymorphic(LocalUser)
+ test_user = user_query.filter(LocalUser.username==username).first()
# ... and detach from session:
Session.expunge(test_user)
@@ -201,7 +204,7 @@ def fixture_add_user(username=u'chris', password=u'toast',
def fixture_comment_subscription(entry, notify=True, send_email=None):
if send_email is None:
- uploader = User.query.filter_by(id=entry.uploader).first()
+ uploader = LocalUser.query.filter_by(id=entry.uploader).first()
send_email = uploader.wants_comment_notification
cs = CommentSubscription(