Merge branch 'master' into jwandborg-f482_media_attachments

Conflicts:
	mediagoblin/config_spec.ini
	mediagoblin/edit/forms.py
	mediagoblin/edit/views.py
	mediagoblin/submit/views.py
	mediagoblin/templates/mediagoblin/user_pages/media.html
This commit is contained in:
Christopher Allan Webber
2011-08-22 21:48:45 -05:00
88 changed files with 5742 additions and 692 deletions

View File

@@ -16,15 +16,17 @@
import wtforms
from mediagoblin.util import tag_length_validator
from mediagoblin.util import fake_ugettext_passthrough as _
class SubmitStartForm(wtforms.Form):
file = wtforms.FileField(_('File'))
title = wtforms.TextField(
'Title',
_('Title'),
[wtforms.validators.Length(min=0, max=500)])
description = wtforms.TextAreaField('Description of this work')
file = wtforms.FileField('File')
tags = wtforms.TextField(
'Tags',
_('Tags'),
[tag_length_validator])

View File

@@ -14,22 +14,21 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import mediagoblin.mg_globals as mg_globals
from datetime import datetime
import uuid
from os.path import splitext
from cgi import FieldStorage
from string import split
from werkzeug.utils import secure_filename
from mediagoblin.db.util import ObjectId
from mediagoblin.util import (
render_to_response, redirect, cleaned_markdown_conversion, \
convert_to_tag_list_of_dicts)
from mediagoblin.util import pass_to_ugettext as _
from mediagoblin.decorators import require_active_login
from mediagoblin.submit import forms as submit_forms, security
from mediagoblin.process_media import process_media_initial
from mediagoblin.process_media import process_media, mark_entry_failed
from mediagoblin.messages import add_message, SUCCESS
@@ -45,15 +44,16 @@ def submit_start(request):
and isinstance(request.POST['file'], FieldStorage)
and request.POST['file'].file):
submit_form.file.errors.append(
u'You must provide a file.')
_(u'You must provide a file.'))
elif not security.check_filetype(request.POST['file']):
submit_form.file.errors.append(
u'The file doesn\'t seem to be an image!')
_(u"The file doesn't seem to be an image!"))
else:
filename = request.POST['file'].filename
# create entry and save in database
entry = request.db.MediaEntry()
entry['_id'] = ObjectId()
entry['title'] = (
request.POST['title']
or unicode(splitext(filename)[0]))
@@ -69,10 +69,6 @@ def submit_start(request):
entry['tags'] = convert_to_tag_list_of_dicts(
request.POST.get('tags'))
# Save, just so we can get the entry id for the sake of using
# it to generate the file path
entry.save(validate=False)
# Generate a slug from the title
entry.generate_slug()
@@ -91,12 +87,39 @@ def submit_start(request):
# Add queued filename to the entry
entry['queued_media_file'] = queue_filepath
# We generate this ourselves so we know what the taks id is for
# retrieval later.
# (If we got it off the task's auto-generation, there'd be a risk of
# a race condition when we'd save after sending off the task)
task_id = unicode(uuid.uuid4())
entry['queued_task_id'] = task_id
# Save now so we have this data before kicking off processing
entry.save(validate=True)
# queue it for processing
process_media_initial.delay(unicode(entry['_id']))
# Pass off to processing
#
# (... don't change entry after this point to avoid race
# conditions with changes to the document via processing code)
try:
process_media.apply_async(
[unicode(entry['_id'])], {},
task_id=task_id)
except BaseException as exc:
# The purpose of this section is because when running in "lazy"
# or always-eager-with-exceptions-propagated celery mode that
# the failure handling won't happen on Celery end. Since we
# expect a lot of users to run things in this way we have to
# capture stuff here.
#
# ... not completely the diaper pattern because the exception is
# re-raised :)
mark_entry_failed(entry[u'_id'], exc)
# re-raise the exception
raise
add_message(request, SUCCESS, 'Woohoo! Submitted!')
add_message(request, SUCCESS, _('Woohoo! Submitted!'))
return redirect(request, "mediagoblin.user_pages.user_home",
user = request.user['username'])