diff --git a/mediagoblin/auth/lib.py b/mediagoblin/auth/lib.py
index cf4a2b83..c0af3b5b 100644
--- a/mediagoblin/auth/lib.py
+++ b/mediagoblin/auth/lib.py
@@ -105,17 +105,17 @@ def send_verification_email(user, request):
"""
rendered_email = render_template(
request, 'mediagoblin/auth/verification_email.txt',
- {'username': user['username'],
+ {'username': user.username,
'verification_url': EMAIL_VERIFICATION_TEMPLATE.format(
host=request.host,
uri=request.urlgen('mediagoblin.auth.verify_email'),
userid=unicode(user._id),
- verification_key=user['verification_key'])})
+ verification_key=user.verification_key)})
# TODO: There is no error handling in place
send_email(
mg_globals.app_config['email_sender_address'],
- [user['email']],
+ [user.email],
# TODO
# Due to the distributed nature of GNU MediaGoblin, we should
# 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(
request, 'mediagoblin/auth/fp_verification_email.txt',
- {'username': user['username'],
+ {'username': user.username,
'verification_url': EMAIL_FP_VERIFICATION_TEMPLATE.format(
host=request.host,
uri=request.urlgen('mediagoblin.auth.verify_forgot_password'),
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
send_email(
mg_globals.app_config['email_sender_address'],
- [user['email']],
+ [user.email],
'GNU MediaGoblin - Change forgotten password!',
rendered_email)
diff --git a/mediagoblin/auth/views.py b/mediagoblin/auth/views.py
index d01861d1..919aa3cd 100644
--- a/mediagoblin/auth/views.py
+++ b/mediagoblin/auth/views.py
@@ -80,9 +80,9 @@ def register(request):
if extra_validation_passes:
# Create the user
user = request.db.User()
- user['username'] = username
- user['email'] = email
- user['pw_hash'] = auth_lib.bcrypt_gen_password_hash(
+ user.username = username
+ user.email = email
+ user.pw_hash = auth_lib.bcrypt_gen_password_hash(
request.POST['password'])
user.save(validate=True)
@@ -98,7 +98,7 @@ def register(request):
# message waiting for them to verify their email
return redirect(
request, 'mediagoblin.user_pages.user_home',
- user=user['username'])
+ user=user.username)
return render_to_response(
request,
@@ -166,10 +166,10 @@ def verify_email(request):
user = request.db.User.find_one(
{'_id': ObjectId(unicode(request.GET['userid']))})
- if user and user['verification_key'] == unicode(request.GET['token']):
- user[u'status'] = u'active'
- user[u'email_verified'] = True
- user[u'verification_key'] = None
+ if user and user.verification_key == unicode(request.GET['token']):
+ user.status = u'active'
+ user.email_verified = True
+ user.verification_key = None
user.save()
@@ -186,7 +186,7 @@ def verify_email(request):
return redirect(
request, 'mediagoblin.user_pages.user_home',
- user=user['username'])
+ user=user.username)
def resend_activation(request):
@@ -212,7 +212,7 @@ def resend_activation(request):
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()
email_debug_message(request)
@@ -224,7 +224,7 @@ def resend_activation(request):
_('Resent your verification email.'))
return redirect(
request, 'mediagoblin.user_pages.user_home',
- user=request.user['username'])
+ user=request.user.username)
def forgot_password(request):
@@ -249,9 +249,9 @@ def forgot_password(request):
{'email': request.POST['username']})
if user:
- if user['email_verified'] and user['status'] == 'active':
- user[u'fp_verification_key'] = unicode(uuid.uuid4())
- user[u'fp_token_expire'] = datetime.datetime.now() + \
+ if user.email_verified and user.status == 'active':
+ user.fp_verification_key = unicode(uuid.uuid4())
+ user.fp_token_expire = datetime.datetime.now() + \
datetime.timedelta(days=10)
user.save()
@@ -268,7 +268,7 @@ def forgot_password(request):
return redirect(
request, 'mediagoblin.user_pages.user_home',
- user=user['username'])
+ user=user.username)
# do not reveal whether or not there is a matching user
return redirect(request, 'mediagoblin.auth.fp_email_sent')
@@ -301,18 +301,18 @@ def verify_forgot_password(request):
return render_404(request)
# check if we have a real user and correct token
- if ((user and user['fp_verification_key'] and
- user['fp_verification_key'] == unicode(formdata_token) and
- datetime.datetime.now() < user['fp_token_expire']
- and user['email_verified'] and user['status'] == 'active')):
+ if ((user and user.fp_verification_key and
+ user.fp_verification_key == unicode(formdata_token) and
+ datetime.datetime.now() < user.fp_token_expire
+ and user.email_verified and user.status == 'active')):
cp_form = auth_forms.ChangePassForm(formdata_vars)
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'])
- user[u'fp_verification_key'] = None
- user[u'fp_token_expire'] = None
+ user.fp_verification_key = None
+ user.fp_token_expire = None
user.save()
return redirect(request, 'mediagoblin.auth.fp_changed_success')
diff --git a/mediagoblin/db/models.py b/mediagoblin/db/models.py
index 265fe36d..569c3600 100644
--- a/mediagoblin/db/models.py
+++ b/mediagoblin/db/models.py
@@ -96,7 +96,7 @@ class User(Document):
See if a user can login with this password
"""
return auth_lib.bcrypt_check_password(
- password, self['pw_hash'])
+ password, self.pw_hash)
class MediaEntry(Document):
@@ -131,7 +131,7 @@ class MediaEntry(Document):
For example, images might contain some EXIF data that's not appropriate
to other formats. You might store it like:
- mediaentry['media_data']['exif'] = {
+ mediaentry.media_data['exif'] = {
'manufacturer': 'CASIO',
'model': 'QV-4000',
'exposure_time': .659}
@@ -139,7 +139,7 @@ class MediaEntry(Document):
Alternately for video you might store:
# 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.
@@ -249,13 +249,13 @@ class MediaEntry(Document):
pass
def generate_slug(self):
- self['slug'] = url.slugify(self['title'])
+ self.slug = url.slugify(self.title)
duplicate = mg_globals.database.media_entries.find_one(
- {'slug': self['slug']})
+ {'slug': self.slug})
if duplicate:
- self['slug'] = "%s-%s" % (self._id, self['slug'])
+ self.slug = "%s-%s" % (self._id, self.slug)
def url_for_self(self, urlgen):
"""
@@ -268,12 +268,12 @@ class MediaEntry(Document):
if self.get('slug'):
return urlgen(
'mediagoblin.user_pages.media_home',
- user=uploader['username'],
- media=self['slug'])
+ user=uploader.username,
+ media=self.slug)
else:
return urlgen(
'mediagoblin.user_pages.media_home',
- user=uploader['username'],
+ user=uploader.username,
media=unicode(self._id))
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
"""
cursor = self.db.MediaEntry.find({'_id': {"$gt": self._id},
- 'uploader': self['uploader'],
+ 'uploader': self.uploader,
'state': 'processed'}).sort(
'_id', ASCENDING).limit(1)
if cursor.count():
return urlgen('mediagoblin.user_pages.media_home',
- user=self.get_uploader()['username'],
- media=unicode(cursor[0]['slug']))
+ user=self.get_uploader().username,
+ media=unicode(cursor[0].slug))
def url_to_next(self, urlgen):
"""
Provide a url to the next entry from this user, if there is one
"""
cursor = self.db.MediaEntry.find({'_id': {"$lt": self._id},
- 'uploader': self['uploader'],
+ 'uploader': self.uploader,
'state': 'processed'}).sort(
'_id', DESCENDING).limit(1)
if cursor.count():
return urlgen('mediagoblin.user_pages.media_home',
- user=self.get_uploader()['username'],
- media=unicode(cursor[0]['slug']))
+ user=self.get_uploader().username,
+ media=unicode(cursor[0].slug))
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):
"""
diff --git a/mediagoblin/decorators.py b/mediagoblin/decorators.py
index 269b0c2e..229664d7 100644
--- a/mediagoblin/decorators.py
+++ b/mediagoblin/decorators.py
@@ -40,7 +40,7 @@ def require_active_login(controller):
request.user.get('status') == u'needs_email_verification':
return redirect(
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':
return exc.HTTPFound(
location="%s?next=%s" % (
@@ -59,7 +59,7 @@ def user_may_delete_media(controller):
def wrapper(request, *args, **kwargs):
uploader = request.db.MediaEntry.find_one(
{'_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):
return exc.HTTPForbidden()
diff --git a/mediagoblin/edit/lib.py b/mediagoblin/edit/lib.py
index 458b704e..a199cbf7 100644
--- a/mediagoblin/edit/lib.py
+++ b/mediagoblin/edit/lib.py
@@ -17,8 +17,8 @@
def may_edit_media(request, media):
"""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
- if request.user['is_admin']:
+ if request.user.is_admin:
return True
return False
diff --git a/mediagoblin/edit/views.py b/mediagoblin/edit/views.py
index 673409bd..4cb98c15 100644
--- a/mediagoblin/edit/views.py
+++ b/mediagoblin/edit/views.py
@@ -43,9 +43,9 @@ def edit_media(request, media):
return exc.HTTPForbidden()
defaults = dict(
- title=media['title'],
- slug=media['slug'],
- description=media['description'],
+ title=media.title,
+ slug=media.slug,
+ description=media.description,
tags=media_tags_as_string(media['tags']))
form = forms.EditForm(
@@ -57,29 +57,29 @@ def edit_media(request, media):
# and userid.
existing_user_slug_entries = request.db.MediaEntry.find(
{'slug': request.POST['slug'],
- 'uploader': media['uploader'],
+ 'uploader': media.uploader,
'_id': {'$ne': media._id}}).count()
if existing_user_slug_entries:
form.slug.errors.append(
_(u'An entry with that slug already exists for this user.'))
else:
- media['title'] = unicode(request.POST['title'])
- media['description'] = unicode(request.POST.get('description'))
+ media.title = unicode(request.POST['title'])
+ media.description = unicode(request.POST.get('description'))
media['tags'] = convert_to_tag_list_of_dicts(
request.POST.get('tags'))
- media['description_html'] = cleaned_markdown_conversion(
- media['description'])
+ media.description_html = cleaned_markdown_conversion(
+ media.description)
- media['slug'] = unicode(request.POST['slug'])
+ media.slug = unicode(request.POST['slug'])
media.save()
return exc.HTTPFound(
location=media.url_for_self(request.urlgen))
- if request.user['is_admin'] \
- and media['uploader'] != request.user._id \
+ if request.user.is_admin \
+ and media.uploader != request.user._id \
and request.method != 'POST':
messages.add_message(
request, messages.WARNING,
@@ -147,7 +147,7 @@ def edit_attachments(request, media):
def edit_profile(request):
# admins may edit any user profile given a username in the querystring
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})
# No need to warn again if admin just submitted an edited profile
if request.method != 'POST':
@@ -176,14 +176,14 @@ def edit_profile(request):
{'user': user,
'form': form})
- user['url'] = unicode(request.POST['url'])
- user['bio'] = unicode(request.POST['bio'])
+ user.url = unicode(request.POST['url'])
+ user.bio = unicode(request.POST['bio'])
if password_matches:
user['pw_hash'] = auth_lib.bcrypt_gen_password_hash(
request.POST['new_password'])
- user['bio_html'] = cleaned_markdown_conversion(user['bio'])
+ user.bio_html = cleaned_markdown_conversion(user['bio'])
user.save()
diff --git a/mediagoblin/gmg_commands/import_export.py b/mediagoblin/gmg_commands/import_export.py
index 4ec17d47..1308f09e 100644
--- a/mediagoblin/gmg_commands/import_export.py
+++ b/mediagoblin/gmg_commands/import_export.py
@@ -67,7 +67,7 @@ def _import_media(db, args):
for entry in db.media_entries.find():
for name, path in entry['media_files'].items():
_log.info('Importing: {0} - {1}'.format(
- entry['title'],
+ entry.title,
name))
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 name, path in entry['media_files'].items():
_log.info(u'Exporting {0} - {1}'.format(
- entry['title'],
+ entry.title,
name))
try:
mc_file = media_cache.get_file(path, mode='wb')
diff --git a/mediagoblin/gmg_commands/users.py b/mediagoblin/gmg_commands/users.py
index b437e839..4bfe30a5 100644
--- a/mediagoblin/gmg_commands/users.py
+++ b/mediagoblin/gmg_commands/users.py
@@ -50,11 +50,11 @@ def adduser(args):
else:
# Create the user
entry = db.User()
- entry['username'] = unicode(args.username.lower())
- entry['email'] = unicode(args.email)
- entry['pw_hash'] = auth_lib.bcrypt_gen_password_hash(args.password)
- entry['status'] = u'active'
- entry['email_verified'] = True
+ entry.username = unicode(args.username.lower())
+ entry.email = unicode(args.email)
+ entry.pw_hash = auth_lib.bcrypt_gen_password_hash(args.password)
+ entry.status = u'active'
+ entry.email_verified = True
entry.save(validate=True)
print "User created (and email marked as verified)"
@@ -73,7 +73,7 @@ def makeadmin(args):
user = db.User.one({'username': unicode(args.username.lower())})
if user:
- user['is_admin'] = True
+ user.is_admin = True
user.save()
print 'The user is now Admin'
else:
@@ -96,7 +96,7 @@ def changepw(args):
user = db.User.one({'username': unicode(args.username.lower())})
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()
print 'Password successfully changed'
else:
diff --git a/mediagoblin/listings/views.py b/mediagoblin/listings/views.py
index 5a09de43..6b83ffcf 100644
--- a/mediagoblin/listings/views.py
+++ b/mediagoblin/listings/views.py
@@ -86,7 +86,7 @@ def tag_atom_feed(request):
feed.add(entry.get('title'),
entry.get('description_html'),
content_type='html',
- author=entry.get_uploader()['username'],
+ author=entry.get_uploader().username,
updated=entry.get('created'),
url=entry.url_for_self(request.urlgen))
diff --git a/mediagoblin/media_types/video/processing.py b/mediagoblin/media_types/video/processing.py
index c0a3fb67..7d261226 100644
--- a/mediagoblin/media_types/video/processing.py
+++ b/mediagoblin/media_types/video/processing.py
@@ -77,7 +77,7 @@ def process_video(entry):
entry['media_files']['webm_640'] = medium_filepath
# Save the width and height of the transcoded video
- entry['media_data']['video'] = {
+ entry.media_data['video'] = {
u'width': transcoder.dst_data.videowidth,
u'height': transcoder.dst_data.videoheight}
diff --git a/mediagoblin/processing.py b/mediagoblin/processing.py
index 89c4ac89..7dd5cc7d 100644
--- a/mediagoblin/processing.py
+++ b/mediagoblin/processing.py
@@ -55,8 +55,8 @@ class ProcessMedia(Task):
# Try to process, and handle expected errors.
try:
- #__import__(entry['media_type'])
- manager = get_media_manager(entry['media_type'])
+ #__import__(entry.media_type)
+ manager = get_media_manager(entry.media_type)
manager['processor'](entry)
except BaseProcessingFail, exc:
mark_entry_failed(entry._id, exc)
diff --git a/mediagoblin/submit/views.py b/mediagoblin/submit/views.py
index 3def44ce..4e4c7c43 100644
--- a/mediagoblin/submit/views.py
+++ b/mediagoblin/submit/views.py
@@ -55,16 +55,16 @@ def submit_start(request):
# create entry and save in database
entry = request.db.MediaEntry()
entry['_id'] = ObjectId()
- entry['media_type'] = unicode(media_type)
- entry['title'] = (
+ entry.media_type = unicode(media_type)
+ entry.title = (
unicode(request.POST['title'])
or unicode(splitext(filename)[0]))
- entry['description'] = unicode(request.POST.get('description'))
- entry['description_html'] = cleaned_markdown_conversion(
- entry['description'])
+ entry.description = unicode(request.POST.get('description'))
+ entry.description_html = cleaned_markdown_conversion(
+ entry.description)
- entry['uploader'] = request.user['_id']
+ entry.uploader = request.user._id
# Process the user's folksonomy "tags"
entry['tags'] = convert_to_tag_list_of_dicts(
@@ -127,7 +127,7 @@ def submit_start(request):
add_message(request, SUCCESS, _('Woohoo! Submitted!'))
return redirect(request, "mediagoblin.user_pages.user_home",
- user=request.user['username'])
+ user=request.user.username)
except InvalidFileType, exc:
submit_form.file.errors.append(
_(u'Invalid file type.'))
diff --git a/mediagoblin/templates/mediagoblin/base.html b/mediagoblin/templates/mediagoblin/base.html
index 29639026..16569f03 100644
--- a/mediagoblin/templates/mediagoblin/base.html
+++ b/mediagoblin/templates/mediagoblin/base.html
@@ -48,7 +48,7 @@
>
{% endblock %}
- {% if request.user and request.user['status'] == 'active' %}
+ {% if request.user and request.user.status == 'active' %}
{% trans %}Submit media{% endtrans %}
@@ -60,14 +60,14 @@
{# the following link should only appear when verification is needed #}
{% if request.user.status == "needs_email_verification" %}
{% trans %}Verify your email!{% endtrans %}
{% endif %}
- {{ request.user['username'] }}
+ user= request.user.username) }}">
+ {{ request.user.username }}
({% trans %}log out{% endtrans %})
{% else %}
diff --git a/mediagoblin/templates/mediagoblin/edit/edit_profile.html b/mediagoblin/templates/mediagoblin/edit/edit_profile.html
index bf8fe5c1..2d5daa95 100644
--- a/mediagoblin/templates/mediagoblin/edit/edit_profile.html
+++ b/mediagoblin/templates/mediagoblin/edit/edit_profile.html
@@ -22,11 +22,11 @@
{% block mediagoblin_content %}