Merge branch 'sql/dot-notation'

* sql/dot-notation:
  Dot-Notation for MediaEntry.media_data
  Dot-Notation for MediaEntry.media_type
  Dot-Notation for MediaEntry.description(_html)
  Dot-Notation for MediaEntry.slug
  Dot-Notation for MediaEntry.title
  Dot-Notation for MediaEntry.uploader
  Dot-Notation for MediaEntry.created
  Dot-Notation: tests/test_edit.py
  Dot-Notation for Users.fp_token_expire
  Dot-Notation for Users.fp_verification_key
  Dot-Notation for Users.bio and .bio_html
  Dot-Notation for Users.url
  Dot-Notation for Users.is_admin
  Dot-Notation for Users.verification_key
  Dot-Notation for Users.status
  Dot-Notation for Users.email_verified
  Dot-Notation for Users.pw_hash
  Dot-Notation for Users.email
  Dot-Notation for Users.username
This commit is contained in:
Elrond 2011-12-12 18:53:03 +01:00
commit d44140a212
24 changed files with 130 additions and 130 deletions

View File

@ -105,17 +105,17 @@ def send_verification_email(user, request):
""" """
rendered_email = render_template( rendered_email = render_template(
request, 'mediagoblin/auth/verification_email.txt', request, 'mediagoblin/auth/verification_email.txt',
{'username': user['username'], {'username': user.username,
'verification_url': EMAIL_VERIFICATION_TEMPLATE.format( 'verification_url': EMAIL_VERIFICATION_TEMPLATE.format(
host=request.host, host=request.host,
uri=request.urlgen('mediagoblin.auth.verify_email'), uri=request.urlgen('mediagoblin.auth.verify_email'),
userid=unicode(user._id), userid=unicode(user._id),
verification_key=user['verification_key'])}) verification_key=user.verification_key)})
# TODO: There is no error handling in place # TODO: There is no error handling in place
send_email( send_email(
mg_globals.app_config['email_sender_address'], mg_globals.app_config['email_sender_address'],
[user['email']], [user.email],
# TODO # TODO
# Due to the distributed nature of GNU MediaGoblin, we should # Due to the distributed nature of GNU MediaGoblin, we should
# find a way to send some additional information about the # find a way to send some additional information about the
@ -140,16 +140,16 @@ def send_fp_verification_email(user, request):
""" """
rendered_email = render_template( rendered_email = render_template(
request, 'mediagoblin/auth/fp_verification_email.txt', request, 'mediagoblin/auth/fp_verification_email.txt',
{'username': user['username'], {'username': user.username,
'verification_url': EMAIL_FP_VERIFICATION_TEMPLATE.format( 'verification_url': EMAIL_FP_VERIFICATION_TEMPLATE.format(
host=request.host, host=request.host,
uri=request.urlgen('mediagoblin.auth.verify_forgot_password'), uri=request.urlgen('mediagoblin.auth.verify_forgot_password'),
userid=unicode(user._id), userid=unicode(user._id),
fp_verification_key=user['fp_verification_key'])}) fp_verification_key=user.fp_verification_key)})
# TODO: There is no error handling in place # TODO: There is no error handling in place
send_email( send_email(
mg_globals.app_config['email_sender_address'], mg_globals.app_config['email_sender_address'],
[user['email']], [user.email],
'GNU MediaGoblin - Change forgotten password!', 'GNU MediaGoblin - Change forgotten password!',
rendered_email) rendered_email)

View File

@ -80,9 +80,9 @@ def register(request):
if extra_validation_passes: if extra_validation_passes:
# Create the user # Create the user
user = request.db.User() user = request.db.User()
user['username'] = username user.username = username
user['email'] = email user.email = email
user['pw_hash'] = auth_lib.bcrypt_gen_password_hash( user.pw_hash = auth_lib.bcrypt_gen_password_hash(
request.POST['password']) request.POST['password'])
user.save(validate=True) user.save(validate=True)
@ -98,7 +98,7 @@ def register(request):
# message waiting for them to verify their email # message waiting for them to verify their email
return redirect( return redirect(
request, 'mediagoblin.user_pages.user_home', request, 'mediagoblin.user_pages.user_home',
user=user['username']) user=user.username)
return render_to_response( return render_to_response(
request, request,
@ -166,10 +166,10 @@ def verify_email(request):
user = request.db.User.find_one( user = request.db.User.find_one(
{'_id': ObjectId(unicode(request.GET['userid']))}) {'_id': ObjectId(unicode(request.GET['userid']))})
if user and user['verification_key'] == unicode(request.GET['token']): if user and user.verification_key == unicode(request.GET['token']):
user[u'status'] = u'active' user.status = u'active'
user[u'email_verified'] = True user.email_verified = True
user[u'verification_key'] = None user.verification_key = None
user.save() user.save()
@ -186,7 +186,7 @@ def verify_email(request):
return redirect( return redirect(
request, 'mediagoblin.user_pages.user_home', request, 'mediagoblin.user_pages.user_home',
user=user['username']) user=user.username)
def resend_activation(request): def resend_activation(request):
@ -212,7 +212,7 @@ def resend_activation(request):
return redirect(request, "mediagoblin.user_pages.user_home", user=request.user['username']) return redirect(request, "mediagoblin.user_pages.user_home", user=request.user['username'])
request.user[u'verification_key'] = unicode(uuid.uuid4()) request.user.verification_key = unicode(uuid.uuid4())
request.user.save() request.user.save()
email_debug_message(request) email_debug_message(request)
@ -224,7 +224,7 @@ def resend_activation(request):
_('Resent your verification email.')) _('Resent your verification email.'))
return redirect( return redirect(
request, 'mediagoblin.user_pages.user_home', request, 'mediagoblin.user_pages.user_home',
user=request.user['username']) user=request.user.username)
def forgot_password(request): def forgot_password(request):
@ -249,9 +249,9 @@ def forgot_password(request):
{'email': request.POST['username']}) {'email': request.POST['username']})
if user: if user:
if user['email_verified'] and user['status'] == 'active': if user.email_verified and user.status == 'active':
user[u'fp_verification_key'] = unicode(uuid.uuid4()) user.fp_verification_key = unicode(uuid.uuid4())
user[u'fp_token_expire'] = datetime.datetime.now() + \ user.fp_token_expire = datetime.datetime.now() + \
datetime.timedelta(days=10) datetime.timedelta(days=10)
user.save() user.save()
@ -268,7 +268,7 @@ def forgot_password(request):
return redirect( return redirect(
request, 'mediagoblin.user_pages.user_home', request, 'mediagoblin.user_pages.user_home',
user=user['username']) user=user.username)
# do not reveal whether or not there is a matching user # do not reveal whether or not there is a matching user
return redirect(request, 'mediagoblin.auth.fp_email_sent') return redirect(request, 'mediagoblin.auth.fp_email_sent')
@ -301,18 +301,18 @@ def verify_forgot_password(request):
return render_404(request) return render_404(request)
# check if we have a real user and correct token # check if we have a real user and correct token
if ((user and user['fp_verification_key'] and if ((user and user.fp_verification_key and
user['fp_verification_key'] == unicode(formdata_token) and user.fp_verification_key == unicode(formdata_token) and
datetime.datetime.now() < user['fp_token_expire'] datetime.datetime.now() < user.fp_token_expire
and user['email_verified'] and user['status'] == 'active')): and user.email_verified and user.status == 'active')):
cp_form = auth_forms.ChangePassForm(formdata_vars) cp_form = auth_forms.ChangePassForm(formdata_vars)
if request.method == 'POST' and cp_form.validate(): if request.method == 'POST' and cp_form.validate():
user[u'pw_hash'] = auth_lib.bcrypt_gen_password_hash( user.pw_hash = auth_lib.bcrypt_gen_password_hash(
request.POST['password']) request.POST['password'])
user[u'fp_verification_key'] = None user.fp_verification_key = None
user[u'fp_token_expire'] = None user.fp_token_expire = None
user.save() user.save()
return redirect(request, 'mediagoblin.auth.fp_changed_success') return redirect(request, 'mediagoblin.auth.fp_changed_success')

View File

@ -96,7 +96,7 @@ class User(Document):
See if a user can login with this password See if a user can login with this password
""" """
return auth_lib.bcrypt_check_password( return auth_lib.bcrypt_check_password(
password, self['pw_hash']) password, self.pw_hash)
class MediaEntry(Document): class MediaEntry(Document):
@ -131,7 +131,7 @@ class MediaEntry(Document):
For example, images might contain some EXIF data that's not appropriate For example, images might contain some EXIF data that's not appropriate
to other formats. You might store it like: to other formats. You might store it like:
mediaentry['media_data']['exif'] = { mediaentry.media_data['exif'] = {
'manufacturer': 'CASIO', 'manufacturer': 'CASIO',
'model': 'QV-4000', 'model': 'QV-4000',
'exposure_time': .659} 'exposure_time': .659}
@ -139,7 +139,7 @@ class MediaEntry(Document):
Alternately for video you might store: Alternately for video you might store:
# play length in seconds # play length in seconds
mediaentry['media_data']['play_length'] = 340 mediaentry.media_data['play_length'] = 340
... so what's appropriate here really depends on the media type. ... so what's appropriate here really depends on the media type.
@ -249,13 +249,13 @@ class MediaEntry(Document):
pass pass
def generate_slug(self): def generate_slug(self):
self['slug'] = url.slugify(self['title']) self.slug = url.slugify(self.title)
duplicate = mg_globals.database.media_entries.find_one( duplicate = mg_globals.database.media_entries.find_one(
{'slug': self['slug']}) {'slug': self.slug})
if duplicate: if duplicate:
self['slug'] = "%s-%s" % (self._id, self['slug']) self.slug = "%s-%s" % (self._id, self.slug)
def url_for_self(self, urlgen): def url_for_self(self, urlgen):
""" """
@ -268,12 +268,12 @@ class MediaEntry(Document):
if self.get('slug'): if self.get('slug'):
return urlgen( return urlgen(
'mediagoblin.user_pages.media_home', 'mediagoblin.user_pages.media_home',
user=uploader['username'], user=uploader.username,
media=self['slug']) media=self.slug)
else: else:
return urlgen( return urlgen(
'mediagoblin.user_pages.media_home', 'mediagoblin.user_pages.media_home',
user=uploader['username'], user=uploader.username,
media=unicode(self._id)) media=unicode(self._id))
def url_to_prev(self, urlgen): def url_to_prev(self, urlgen):
@ -281,30 +281,30 @@ class MediaEntry(Document):
Provide a url to the previous entry from this user, if there is one Provide a url to the previous entry from this user, if there is one
""" """
cursor = self.db.MediaEntry.find({'_id': {"$gt": self._id}, cursor = self.db.MediaEntry.find({'_id': {"$gt": self._id},
'uploader': self['uploader'], 'uploader': self.uploader,
'state': 'processed'}).sort( 'state': 'processed'}).sort(
'_id', ASCENDING).limit(1) '_id', ASCENDING).limit(1)
if cursor.count(): if cursor.count():
return urlgen('mediagoblin.user_pages.media_home', return urlgen('mediagoblin.user_pages.media_home',
user=self.get_uploader()['username'], user=self.get_uploader().username,
media=unicode(cursor[0]['slug'])) media=unicode(cursor[0].slug))
def url_to_next(self, urlgen): def url_to_next(self, urlgen):
""" """
Provide a url to the next entry from this user, if there is one Provide a url to the next entry from this user, if there is one
""" """
cursor = self.db.MediaEntry.find({'_id': {"$lt": self._id}, cursor = self.db.MediaEntry.find({'_id': {"$lt": self._id},
'uploader': self['uploader'], 'uploader': self.uploader,
'state': 'processed'}).sort( 'state': 'processed'}).sort(
'_id', DESCENDING).limit(1) '_id', DESCENDING).limit(1)
if cursor.count(): if cursor.count():
return urlgen('mediagoblin.user_pages.media_home', return urlgen('mediagoblin.user_pages.media_home',
user=self.get_uploader()['username'], user=self.get_uploader().username,
media=unicode(cursor[0]['slug'])) media=unicode(cursor[0].slug))
def get_uploader(self): def get_uploader(self):
return self.db.User.find_one({'_id': self['uploader']}) return self.db.User.find_one({'_id': self.uploader})
def get_fail_exception(self): def get_fail_exception(self):
""" """

View File

@ -40,7 +40,7 @@ def require_active_login(controller):
request.user.get('status') == u'needs_email_verification': request.user.get('status') == u'needs_email_verification':
return redirect( return redirect(
request, 'mediagoblin.user_pages.user_home', request, 'mediagoblin.user_pages.user_home',
user=request.user['username']) user=request.user.username)
elif not request.user or request.user.get('status') != u'active': elif not request.user or request.user.get('status') != u'active':
return exc.HTTPFound( return exc.HTTPFound(
location="%s?next=%s" % ( location="%s?next=%s" % (
@ -59,7 +59,7 @@ def user_may_delete_media(controller):
def wrapper(request, *args, **kwargs): def wrapper(request, *args, **kwargs):
uploader = request.db.MediaEntry.find_one( uploader = request.db.MediaEntry.find_one(
{'_id': ObjectId(request.matchdict['media'])}).get_uploader() {'_id': ObjectId(request.matchdict['media'])}).get_uploader()
if not (request.user['is_admin'] or if not (request.user.is_admin or
request.user._id == uploader._id): request.user._id == uploader._id):
return exc.HTTPForbidden() return exc.HTTPForbidden()

View File

@ -17,8 +17,8 @@
def may_edit_media(request, media): def may_edit_media(request, media):
"""Check, if the request's user may edit the media details""" """Check, if the request's user may edit the media details"""
if media['uploader'] == request.user._id: if media.uploader == request.user._id:
return True return True
if request.user['is_admin']: if request.user.is_admin:
return True return True
return False return False

View File

@ -43,9 +43,9 @@ def edit_media(request, media):
return exc.HTTPForbidden() return exc.HTTPForbidden()
defaults = dict( defaults = dict(
title=media['title'], title=media.title,
slug=media['slug'], slug=media.slug,
description=media['description'], description=media.description,
tags=media_tags_as_string(media['tags'])) tags=media_tags_as_string(media['tags']))
form = forms.EditForm( form = forms.EditForm(
@ -57,29 +57,29 @@ def edit_media(request, media):
# and userid. # and userid.
existing_user_slug_entries = request.db.MediaEntry.find( existing_user_slug_entries = request.db.MediaEntry.find(
{'slug': request.POST['slug'], {'slug': request.POST['slug'],
'uploader': media['uploader'], 'uploader': media.uploader,
'_id': {'$ne': media._id}}).count() '_id': {'$ne': media._id}}).count()
if existing_user_slug_entries: if existing_user_slug_entries:
form.slug.errors.append( form.slug.errors.append(
_(u'An entry with that slug already exists for this user.')) _(u'An entry with that slug already exists for this user.'))
else: else:
media['title'] = unicode(request.POST['title']) media.title = unicode(request.POST['title'])
media['description'] = unicode(request.POST.get('description')) media.description = unicode(request.POST.get('description'))
media['tags'] = convert_to_tag_list_of_dicts( media['tags'] = convert_to_tag_list_of_dicts(
request.POST.get('tags')) request.POST.get('tags'))
media['description_html'] = cleaned_markdown_conversion( media.description_html = cleaned_markdown_conversion(
media['description']) media.description)
media['slug'] = unicode(request.POST['slug']) media.slug = unicode(request.POST['slug'])
media.save() media.save()
return exc.HTTPFound( return exc.HTTPFound(
location=media.url_for_self(request.urlgen)) location=media.url_for_self(request.urlgen))
if request.user['is_admin'] \ if request.user.is_admin \
and media['uploader'] != request.user._id \ and media.uploader != request.user._id \
and request.method != 'POST': and request.method != 'POST':
messages.add_message( messages.add_message(
request, messages.WARNING, request, messages.WARNING,
@ -147,7 +147,7 @@ def edit_attachments(request, media):
def edit_profile(request): def edit_profile(request):
# admins may edit any user profile given a username in the querystring # admins may edit any user profile given a username in the querystring
edit_username = request.GET.get('username') edit_username = request.GET.get('username')
if request.user['is_admin'] and request.user['username'] != edit_username: if request.user.is_admin and request.user.username != edit_username:
user = request.db.User.find_one({'username': edit_username}) user = request.db.User.find_one({'username': edit_username})
# No need to warn again if admin just submitted an edited profile # No need to warn again if admin just submitted an edited profile
if request.method != 'POST': if request.method != 'POST':
@ -176,14 +176,14 @@ def edit_profile(request):
{'user': user, {'user': user,
'form': form}) 'form': form})
user['url'] = unicode(request.POST['url']) user.url = unicode(request.POST['url'])
user['bio'] = unicode(request.POST['bio']) user.bio = unicode(request.POST['bio'])
if password_matches: if password_matches:
user['pw_hash'] = auth_lib.bcrypt_gen_password_hash( user['pw_hash'] = auth_lib.bcrypt_gen_password_hash(
request.POST['new_password']) request.POST['new_password'])
user['bio_html'] = cleaned_markdown_conversion(user['bio']) user.bio_html = cleaned_markdown_conversion(user['bio'])
user.save() user.save()

View File

@ -67,7 +67,7 @@ def _import_media(db, args):
for entry in db.media_entries.find(): for entry in db.media_entries.find():
for name, path in entry['media_files'].items(): for name, path in entry['media_files'].items():
_log.info('Importing: {0} - {1}'.format( _log.info('Importing: {0} - {1}'.format(
entry['title'], entry.title,
name)) name))
media_file = mg_globals.public_store.get_file(path, mode='wb') media_file = mg_globals.public_store.get_file(path, mode='wb')
@ -209,7 +209,7 @@ def _export_media(db, args):
for entry in db.media_entries.find(): for entry in db.media_entries.find():
for name, path in entry['media_files'].items(): for name, path in entry['media_files'].items():
_log.info(u'Exporting {0} - {1}'.format( _log.info(u'Exporting {0} - {1}'.format(
entry['title'], entry.title,
name)) name))
try: try:
mc_file = media_cache.get_file(path, mode='wb') mc_file = media_cache.get_file(path, mode='wb')

View File

@ -50,11 +50,11 @@ def adduser(args):
else: else:
# Create the user # Create the user
entry = db.User() entry = db.User()
entry['username'] = unicode(args.username.lower()) entry.username = unicode(args.username.lower())
entry['email'] = unicode(args.email) entry.email = unicode(args.email)
entry['pw_hash'] = auth_lib.bcrypt_gen_password_hash(args.password) entry.pw_hash = auth_lib.bcrypt_gen_password_hash(args.password)
entry['status'] = u'active' entry.status = u'active'
entry['email_verified'] = True entry.email_verified = True
entry.save(validate=True) entry.save(validate=True)
print "User created (and email marked as verified)" print "User created (and email marked as verified)"
@ -73,7 +73,7 @@ def makeadmin(args):
user = db.User.one({'username': unicode(args.username.lower())}) user = db.User.one({'username': unicode(args.username.lower())})
if user: if user:
user['is_admin'] = True user.is_admin = True
user.save() user.save()
print 'The user is now Admin' print 'The user is now Admin'
else: else:
@ -96,7 +96,7 @@ def changepw(args):
user = db.User.one({'username': unicode(args.username.lower())}) user = db.User.one({'username': unicode(args.username.lower())})
if user: if user:
user['pw_hash'] = auth_lib.bcrypt_gen_password_hash(args.password) user.pw_hash = auth_lib.bcrypt_gen_password_hash(args.password)
user.save() user.save()
print 'Password successfully changed' print 'Password successfully changed'
else: else:

View File

@ -86,7 +86,7 @@ def tag_atom_feed(request):
feed.add(entry.get('title'), feed.add(entry.get('title'),
entry.get('description_html'), entry.get('description_html'),
content_type='html', content_type='html',
author=entry.get_uploader()['username'], author=entry.get_uploader().username,
updated=entry.get('created'), updated=entry.get('created'),
url=entry.url_for_self(request.urlgen)) url=entry.url_for_self(request.urlgen))

View File

@ -77,7 +77,7 @@ def process_video(entry):
entry['media_files']['webm_640'] = medium_filepath entry['media_files']['webm_640'] = medium_filepath
# Save the width and height of the transcoded video # Save the width and height of the transcoded video
entry['media_data']['video'] = { entry.media_data['video'] = {
u'width': transcoder.dst_data.videowidth, u'width': transcoder.dst_data.videowidth,
u'height': transcoder.dst_data.videoheight} u'height': transcoder.dst_data.videoheight}

View File

@ -55,8 +55,8 @@ class ProcessMedia(Task):
# Try to process, and handle expected errors. # Try to process, and handle expected errors.
try: try:
#__import__(entry['media_type']) #__import__(entry.media_type)
manager = get_media_manager(entry['media_type']) manager = get_media_manager(entry.media_type)
manager['processor'](entry) manager['processor'](entry)
except BaseProcessingFail, exc: except BaseProcessingFail, exc:
mark_entry_failed(entry._id, exc) mark_entry_failed(entry._id, exc)

View File

@ -55,16 +55,16 @@ def submit_start(request):
# create entry and save in database # create entry and save in database
entry = request.db.MediaEntry() entry = request.db.MediaEntry()
entry['_id'] = ObjectId() entry['_id'] = ObjectId()
entry['media_type'] = unicode(media_type) entry.media_type = unicode(media_type)
entry['title'] = ( entry.title = (
unicode(request.POST['title']) unicode(request.POST['title'])
or unicode(splitext(filename)[0])) or unicode(splitext(filename)[0]))
entry['description'] = unicode(request.POST.get('description')) entry.description = unicode(request.POST.get('description'))
entry['description_html'] = cleaned_markdown_conversion( entry.description_html = cleaned_markdown_conversion(
entry['description']) entry.description)
entry['uploader'] = request.user['_id'] entry.uploader = request.user._id
# Process the user's folksonomy "tags" # Process the user's folksonomy "tags"
entry['tags'] = convert_to_tag_list_of_dicts( entry['tags'] = convert_to_tag_list_of_dicts(
@ -127,7 +127,7 @@ def submit_start(request):
add_message(request, SUCCESS, _('Woohoo! Submitted!')) add_message(request, SUCCESS, _('Woohoo! Submitted!'))
return redirect(request, "mediagoblin.user_pages.user_home", return redirect(request, "mediagoblin.user_pages.user_home",
user=request.user['username']) user=request.user.username)
except InvalidFileType, exc: except InvalidFileType, exc:
submit_form.file.errors.append( submit_form.file.errors.append(
_(u'Invalid file type.')) _(u'Invalid file type.'))

View File

@ -48,7 +48,7 @@
><img src="{{ request.staticdirect('/images/logo.png') }}" ><img src="{{ request.staticdirect('/images/logo.png') }}"
alt="{% trans %}MediaGoblin logo{% endtrans %}" /></a> alt="{% trans %}MediaGoblin logo{% endtrans %}" /></a>
{% endblock %} {% endblock %}
{% if request.user and request.user['status'] == 'active' %} {% if request.user and request.user.status == 'active' %}
<a class="button_action" <a class="button_action"
href="{{ request.urlgen('mediagoblin.submit.start') }}"> href="{{ request.urlgen('mediagoblin.submit.start') }}">
{% trans %}Submit media{% endtrans %} {% trans %}Submit media{% endtrans %}
@ -60,14 +60,14 @@
{# the following link should only appear when verification is needed #} {# the following link should only appear when verification is needed #}
{% if request.user.status == "needs_email_verification" %} {% if request.user.status == "needs_email_verification" %}
<a href="{{ request.urlgen('mediagoblin.user_pages.user_home', <a href="{{ request.urlgen('mediagoblin.user_pages.user_home',
user=request.user['username']) }}" user=request.user.username) }}"
class="button_action_highlight"> class="button_action_highlight">
{% trans %}Verify your email!{% endtrans %}</a> {% trans %}Verify your email!{% endtrans %}</a>
{% endif %} {% endif %}
<a href="{{ request.urlgen('mediagoblin.user_pages.user_home', <a href="{{ request.urlgen('mediagoblin.user_pages.user_home',
user= request.user['username']) }}"> user= request.user.username) }}">
{{ request.user['username'] }}</a> {{ request.user.username }}</a>
(<a href="{{ request.urlgen('mediagoblin.auth.logout') }}">{% trans %}log out{% endtrans %}</a>) (<a href="{{ request.urlgen('mediagoblin.auth.logout') }}">{% trans %}log out{% endtrans %}</a>)
{% else %} {% else %}

View File

@ -22,11 +22,11 @@
{% block mediagoblin_content %} {% block mediagoblin_content %}
<form action="{{ request.urlgen('mediagoblin.edit.profile') }}?username={{ <form action="{{ request.urlgen('mediagoblin.edit.profile') }}?username={{
user['username'] }}" user.username }}"
method="POST" enctype="multipart/form-data"> method="POST" enctype="multipart/form-data">
<div class="grid_8 prefix_1 suffix_1 edit_box form_box"> <div class="grid_8 prefix_1 suffix_1 edit_box form_box">
<h1> <h1>
{%- trans username=user['username'] -%} {%- trans username=user.username -%}
Editing {{ username }}'s profile Editing {{ username }}'s profile
{%- endtrans %} {%- endtrans %}
</h1> </h1>

View File

@ -80,8 +80,8 @@
{% endautoescape %} {% endautoescape %}
<img src="{{ request.staticdirect('/images/icon_comment.png') }}" /> <img src="{{ request.staticdirect('/images/icon_comment.png') }}" />
<a href="{{ request.urlgen('mediagoblin.user_pages.user_home', <a href="{{ request.urlgen('mediagoblin.user_pages.user_home',
user = comment_author['username']) }}"> user = comment_author.username) }}">
{{ comment_author['username'] }}</a> {{ comment_author.username }}</a>
{% trans %}at{% endtrans %} {% trans %}at{% endtrans %}
<a href="{{ request.urlgen('mediagoblin.user_pages.media_home.view_comment', <a href="{{ request.urlgen('mediagoblin.user_pages.media_home.view_comment',
comment = comment._id, comment = comment._id,
@ -115,8 +115,8 @@
<div class="grid_5 omega"> <div class="grid_5 omega">
{% include "mediagoblin/utils/prev_next.html" %} {% include "mediagoblin/utils/prev_next.html" %}
{% if media['uploader'] == request.user._id or {% if media.uploader == request.user._id or
request.user['is_admin'] %} request.user.is_admin %}
<p> <p>
{% set edit_url = request.urlgen('mediagoblin.edit.edit_media', {% set edit_url = request.urlgen('mediagoblin.edit.edit_media',
user= media.get_uploader().username, user= media.get_uploader().username,
@ -145,8 +145,8 @@
{% endif %} {% endif %}
{% if app_config['allow_attachments'] {% if app_config['allow_attachments']
and (media['uploader'] == request.user._id and (media.uploader == request.user._id
or request.user['is_admin']) %} or request.user.is_admin) %}
<p> <p>
<a href="{{ request.urlgen('mediagoblin.edit.attachments', <a href="{{ request.urlgen('mediagoblin.edit.attachments',
user=media.get_uploader().username, user=media.get_uploader().username,

View File

@ -27,7 +27,7 @@
method="POST" enctype="multipart/form-data"> method="POST" enctype="multipart/form-data">
<div class="grid_8 prefix_1 suffix_1 edit_box form_box"> <div class="grid_8 prefix_1 suffix_1 edit_box form_box">
<h1> <h1>
{%- trans title=media['title'] -%} {%- trans title=media.title -%}
Really delete {{ title }}? Really delete {{ title }}?
{%- endtrans %} {%- endtrans %}
</h1> </h1>

View File

@ -36,8 +36,8 @@
</tr> </tr>
{% for media_entry in processing_entries %} {% for media_entry in processing_entries %}
<tr> <tr>
<td>{{ media_entry['title'] }}</td> <td>{{ media_entry.title }}</td>
<td>{{ media_entry['created'].strftime("%m-%d-%Y %I:%M %p") }}</td> <td>{{ media_entry.created.strftime("%m-%d-%Y %I:%M %p") }}</td>
<td></td> <td></td>
</tr> </tr>
{% endfor %} {% endfor %}
@ -57,7 +57,7 @@
</tr> </tr>
{% for media_entry in failed_entries %} {% for media_entry in failed_entries %}
<tr> <tr>
<td>{{ media_entry['title'] }}</td> <td>{{ media_entry.title }}</td>
<td>{{ media_entry['created'].strftime("%m-%d-%Y %I:%M %p") }}</td> <td>{{ media_entry['created'].strftime("%m-%d-%Y %I:%M %p") }}</td>
<td>{{ media_entry.get_fail_exception().general_message }}</td> <td>{{ media_entry.get_fail_exception().general_message }}</td>
</tr> </tr>

View File

@ -89,7 +89,7 @@
{%- trans username=user.username %}{{ username }}'s profile{% endtrans -%} {%- trans username=user.username %}{{ username }}'s profile{% endtrans -%}
</h1> </h1>
{% if not user['url'] and not user['bio'] %} {% if not user.url and not user.bio %}
{% if request.user._id == user._id %} {% if request.user._id == user._id %}
<div class="grid_6 alpha empty_space"> <div class="grid_6 alpha empty_space">
<p> <p>
@ -113,7 +113,7 @@
{% else %} {% else %}
<div class="grid_6 alpha"> <div class="grid_6 alpha">
{% include "mediagoblin/utils/profile.html" %} {% include "mediagoblin/utils/profile.html" %}
{% if request.user._id == user._id or request.user['is_admin'] %} {% if request.user._id == user._id or request.user.is_admin %}
<a href="{{ request.urlgen('mediagoblin.edit.profile') }}?username={{ <a href="{{ request.urlgen('mediagoblin.edit.profile') }}?username={{
user.username }}"> user.username }}">
{%- trans %}Edit profile{% endtrans -%} {%- trans %}Edit profile{% endtrans -%}

View File

@ -33,9 +33,9 @@
<img src="{{ request.app.public_store.file_url( <img src="{{ request.app.public_store.file_url(
entry['media_files']['thumb']) }}" /> entry['media_files']['thumb']) }}" />
</a> </a>
{% if entry['title'] %} {% if entry.title %}
<br /> <br />
<a href="{{ entry_url }}">{{ entry['title'] }}</a> <a href="{{ entry_url }}">{{ entry.title }}</a>
{% endif %} {% endif %}
</td> </td>
{% endfor %} {% endfor %}

View File

@ -162,8 +162,8 @@ def test_register_views(test_app):
new_user = mg_globals.database.User.find_one( new_user = mg_globals.database.User.find_one(
{'username': 'happygirl'}) {'username': 'happygirl'})
assert new_user assert new_user
assert new_user['status'] == u'needs_email_verification' assert new_user.status == u'needs_email_verification'
assert new_user['email_verified'] == False assert new_user.email_verified == False
## Make sure user is logged in ## Make sure user is logged in
request = template.TEMPLATE_TEST_CONTEXT[ request = template.TEMPLATE_TEST_CONTEXT[
@ -187,7 +187,7 @@ def test_register_views(test_app):
assert parsed_get_params['userid'] == [ assert parsed_get_params['userid'] == [
unicode(new_user._id)] unicode(new_user._id)]
assert parsed_get_params['token'] == [ assert parsed_get_params['token'] == [
new_user['verification_key']] new_user.verification_key]
## Try verifying with bs verification key, shouldn't work ## Try verifying with bs verification key, shouldn't work
template.clear_test_template_context() template.clear_test_template_context()
@ -202,8 +202,8 @@ def test_register_views(test_app):
new_user = mg_globals.database.User.find_one( new_user = mg_globals.database.User.find_one(
{'username': 'happygirl'}) {'username': 'happygirl'})
assert new_user assert new_user
assert new_user['status'] == u'needs_email_verification' assert new_user.status == u'needs_email_verification'
assert new_user['email_verified'] == False assert new_user.email_verified == False
## Verify the email activation works ## Verify the email activation works
template.clear_test_template_context() template.clear_test_template_context()
@ -216,8 +216,8 @@ def test_register_views(test_app):
new_user = mg_globals.database.User.find_one( new_user = mg_globals.database.User.find_one(
{'username': 'happygirl'}) {'username': 'happygirl'})
assert new_user assert new_user
assert new_user['status'] == u'active' assert new_user.status == u'active'
assert new_user['email_verified'] == True assert new_user.email_verified == True
# Uniqueness checks # Uniqueness checks
# ----------------- # -----------------
@ -270,11 +270,11 @@ def test_register_views(test_app):
# user should have matching parameters # user should have matching parameters
new_user = mg_globals.database.User.find_one({'username': 'happygirl'}) new_user = mg_globals.database.User.find_one({'username': 'happygirl'})
assert parsed_get_params['userid'] == [unicode(new_user._id)] assert parsed_get_params['userid'] == [unicode(new_user._id)]
assert parsed_get_params['token'] == [new_user['fp_verification_key']] assert parsed_get_params['token'] == [new_user.fp_verification_key]
### The forgotten password token should be set to expire in ~ 10 days ### The forgotten password token should be set to expire in ~ 10 days
# A few ticks have expired so there are only 9 full days left... # A few ticks have expired so there are only 9 full days left...
assert (new_user['fp_token_expire'] - datetime.datetime.now()).days == 9 assert (new_user.fp_token_expire - datetime.datetime.now()).days == 9
## Try using a bs password-changing verification key, shouldn't work ## Try using a bs password-changing verification key, shouldn't work
template.clear_test_template_context() template.clear_test_template_context()
@ -285,12 +285,12 @@ def test_register_views(test_app):
## Try using an expired token to change password, shouldn't work ## Try using an expired token to change password, shouldn't work
template.clear_test_template_context() template.clear_test_template_context()
real_token_expiration = new_user['fp_token_expire'] real_token_expiration = new_user.fp_token_expire
new_user['fp_token_expire'] = datetime.datetime.now() new_user.fp_token_expire = datetime.datetime.now()
new_user.save() new_user.save()
response = test_app.get("%s?%s" % (path, get_params), status=404) response = test_app.get("%s?%s" % (path, get_params), status=404)
assert_equal(response.status, '404 Not Found') assert_equal(response.status, '404 Not Found')
new_user['fp_token_expire'] = real_token_expiration new_user.fp_token_expire = real_token_expiration
new_user.save() new_user.save()
## Verify step 1 of password-change works -- can see form to change password ## Verify step 1 of password-change works -- can see form to change password

View File

@ -44,7 +44,7 @@ def test_change_password(test_app):
# test_user has to be fetched again in order to have the current values # test_user has to be fetched again in order to have the current values
test_user = mg_globals.database.User.one({'username': 'chris'}) test_user = mg_globals.database.User.one({'username': 'chris'})
assert bcrypt_check_password('123456', test_user['pw_hash']) assert bcrypt_check_password('123456', test_user.pw_hash)
# test that the password cannot be changed if the given old_password # test that the password cannot be changed if the given old_password
# is wrong # is wrong
@ -59,7 +59,7 @@ def test_change_password(test_app):
test_user = mg_globals.database.User.one({'username': 'chris'}) test_user = mg_globals.database.User.one({'username': 'chris'})
assert not bcrypt_check_password('098765', test_user['pw_hash']) assert not bcrypt_check_password('098765', test_user.pw_hash)
@setup_fresh_app @setup_fresh_app
@ -76,8 +76,8 @@ def change_bio_url(test_app):
test_user = mg_globals.database.User.one({'username': 'chris'}) test_user = mg_globals.database.User.one({'username': 'chris'})
assert test_user['bio'] == u'I love toast!' assert test_user.bio == u'I love toast!'
assert test_user['url'] == u'http://dustycloud.org/' assert test_user.url == u'http://dustycloud.org/'
# test changing the bio and the URL inproperly # test changing the bio and the URL inproperly
too_long_bio = 150 * 'T' + 150 * 'o' + 150 * 'a' + 150 * 's' + 150* 't' too_long_bio = 150 * 'T' + 150 * 'o' + 150 * 'a' + 150 * 's' + 150* 't'

View File

@ -170,7 +170,7 @@ class TestSubmission:
response = self.test_app.post( response = self.test_app.post(
request.urlgen('mediagoblin.user_pages.media_confirm_delete', request.urlgen('mediagoblin.user_pages.media_confirm_delete',
# No work: user=media.uploader().username, # No work: user=media.uploader().username,
user=self.test_user['username'], user=self.test_user.username,
media=media._id), media=media._id),
# no value means no confirm # no value means no confirm
{}) {})
@ -190,7 +190,7 @@ class TestSubmission:
response = self.test_app.post( response = self.test_app.post(
request.urlgen('mediagoblin.user_pages.media_confirm_delete', request.urlgen('mediagoblin.user_pages.media_confirm_delete',
# No work: user=media.uploader().username, # No work: user=media.uploader().username,
user=self.test_user['username'], user=self.test_user.username,
media=media._id), media=media._id),
{'confirm': 'y'}) {'confirm': 'y'})

View File

@ -27,9 +27,9 @@ def test_get_test_app_wipes_db():
assert mg_globals.database.User.find().count() == 0 assert mg_globals.database.User.find().count() == 0
new_user = mg_globals.database.User() new_user = mg_globals.database.User()
new_user['username'] = u'lolcat' new_user.username = u'lolcat'
new_user['email'] = u'lol@cats.example.org' new_user.email = u'lol@cats.example.org'
new_user['pw_hash'] = u'pretend_this_is_a_hash' new_user.pw_hash = u'pretend_this_is_a_hash'
new_user.save() new_user.save()
assert mg_globals.database.User.find().count() == 1 assert mg_globals.database.User.find().count() == 1

View File

@ -40,7 +40,7 @@ def user_home(request, page):
'username': request.matchdict['user']}) 'username': request.matchdict['user']})
if not user: if not user:
return render_404(request) return render_404(request)
elif user['status'] != u'active': elif user.status != u'active':
return render_to_response( return render_to_response(
request, request,
'mediagoblin/user_pages/user.html', 'mediagoblin/user_pages/user.html',
@ -59,7 +59,7 @@ def user_home(request, page):
user_gallery_url = request.urlgen( user_gallery_url = request.urlgen(
'mediagoblin.user_pages.user_gallery', 'mediagoblin.user_pages.user_gallery',
user=user['username']) user=user.username)
return render_to_response( return render_to_response(
request, request,
@ -122,7 +122,7 @@ def media_home(request, media, page, **kwargs):
comment_form = user_forms.MediaCommentForm(request.POST) comment_form = user_forms.MediaCommentForm(request.POST)
media_template_name = get_media_manager(media['media_type'])['display_template'] media_template_name = get_media_manager(media.media_type)['display_template']
return render_to_response( return render_to_response(
request, request,
@ -173,7 +173,7 @@ def media_confirm_delete(request, media):
if request.method == 'POST' and form.validate(): if request.method == 'POST' and form.validate():
if form.confirm.data is True: if form.confirm.data is True:
username = media.get_uploader()['username'] username = media.get_uploader().username
# Delete all files on the public storage # Delete all files on the public storage
delete_media_files(media) delete_media_files(media)
@ -191,7 +191,7 @@ def media_confirm_delete(request, media):
return exc.HTTPFound( return exc.HTTPFound(
location=media.url_for_self(request.urlgen)) location=media.url_for_self(request.urlgen))
if ((request.user[u'is_admin'] and if ((request.user.is_admin and
request.user._id != media.get_uploader()._id)): request.user._id != media.get_uploader()._id)):
messages.add_message( messages.add_message(
request, messages.WARNING, request, messages.WARNING,
@ -254,7 +254,7 @@ def processing_panel(request):
# Make sure the user exists and is active # Make sure the user exists and is active
if not user: if not user:
return render_404(request) return render_404(request)
elif user['status'] != u'active': elif user.status != u'active':
return render_to_response( return render_to_response(
request, request,
'mediagoblin/user_pages/user.html', 'mediagoblin/user_pages/user.html',