diff options
Diffstat (limited to 'mediagoblin/submit')
-rw-r--r-- | mediagoblin/submit/forms.py | 6 | ||||
-rw-r--r-- | mediagoblin/submit/lib.py | 38 | ||||
-rw-r--r-- | mediagoblin/submit/views.py | 29 |
3 files changed, 40 insertions, 33 deletions
diff --git a/mediagoblin/submit/forms.py b/mediagoblin/submit/forms.py index 6c0e8e9c..c5bacc44 100644 --- a/mediagoblin/submit/forms.py +++ b/mediagoblin/submit/forms.py @@ -33,7 +33,7 @@ def get_submit_start_form(form, **kwargs): file = wtforms.FileField( _('File'), description=desc) - title = wtforms.TextField( + title = wtforms.StringField( _('Title'), [wtforms.validators.Length(min=0, max=500)]) description = wtforms.TextAreaField( @@ -41,7 +41,7 @@ def get_submit_start_form(form, **kwargs): description=_("""You can use <a href="http://daringfireball.net/projects/markdown/basics"> Markdown</a> for formatting.""")) - tags = wtforms.TextField( + tags = wtforms.StringField( _('Tags'), [tag_length_validator], description=_( @@ -57,7 +57,7 @@ def get_submit_start_form(form, **kwargs): return SubmitStartForm(form, **kwargs) class AddCollectionForm(wtforms.Form): - title = wtforms.TextField( + title = wtforms.StringField( _('Title'), [wtforms.validators.Length(min=0, max=500), wtforms.validators.InputRequired()]) description = wtforms.TextAreaField( diff --git a/mediagoblin/submit/lib.py b/mediagoblin/submit/lib.py index aaa90ea0..a0e1cf90 100644 --- a/mediagoblin/submit/lib.py +++ b/mediagoblin/submit/lib.py @@ -18,12 +18,15 @@ import logging import uuid from os.path import splitext +import six + from werkzeug.utils import secure_filename from werkzeug.datastructures import FileStorage from mediagoblin import mg_globals from mediagoblin.tools.response import json_response from mediagoblin.tools.text import convert_to_tag_list_of_dicts +from mediagoblin.tools.federation import create_activity, create_generator from mediagoblin.db.models import MediaEntry, ProcessingMetaData from mediagoblin.processing import mark_entry_failed from mediagoblin.processing.task import ProcessMedia @@ -58,7 +61,7 @@ def get_upload_file_limits(user): """ Get the upload_limit and max_file_size for this user """ - if user.upload_limit >= 0: + if user.upload_limit is not None and user.upload_limit >= 0: # TODO: debug this upload_limit = user.upload_limit else: upload_limit = mg_globals.app_config.get('upload_limit', None) @@ -128,7 +131,7 @@ def submit_media(mg_app, user, submitted_file, filename, # If the filename contains non ascii generate a unique name if not all(ord(c) < 128 for c in filename): - filename = unicode(uuid.uuid4()) + splitext(filename)[-1] + filename = six.text_type(uuid.uuid4()) + splitext(filename)[-1] # Sniff the submitted media to determine which # media plugin should handle processing @@ -137,7 +140,7 @@ def submit_media(mg_app, user, submitted_file, filename, # create entry and save in database entry = new_upload_entry(user) entry.media_type = media_type - entry.title = (title or unicode(splitext(filename)[0])) + entry.title = (title or six.text_type(splitext(filename)[0])) entry.description = description or u"" @@ -154,7 +157,7 @@ def submit_media(mg_app, user, submitted_file, filename, queue_file = prepare_queue_task(mg_app, entry, filename) with queue_file: - queue_file.write(submitted_file.read()) + queue_file.write(submitted_file) # Get file size and round to 2 decimal places file_size = mg_app.queue_store.get_file_size( @@ -192,14 +195,18 @@ def submit_media(mg_app, user, submitted_file, filename, else: feed_url = None + add_comment_subscription(user, entry) + + # Create activity + create_activity("post", entry, entry.uploader) + entry.save() + # Pass off to processing # # (... don't change entry after this point to avoid race # conditions with changes to the document via processing code) run_process_media(entry, feed_url) - add_comment_subscription(user, entry) - return entry @@ -213,7 +220,7 @@ def prepare_queue_task(app, entry, filename): # (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()) + task_id = six.text_type(uuid.uuid4()) entry.queued_task_id = task_id # Now store generate the queueing related filename @@ -279,14 +286,21 @@ def api_upload_request(request, file_data, entry): def api_add_to_feed(request, entry): """ Add media to Feed """ - if entry.title: - entry.generate_slug() - feed_url = request.urlgen( 'mediagoblin.user_pages.atom_feed', qualified=True, user=request.user.username ) - run_process_media(entry, feed_url) add_comment_subscription(request.user, entry) - return json_response(entry.serialize(request)) + + # Create activity + activity = create_activity( + verb="post", + obj=entry, + actor=entry.uploader, + generator=create_generator(request) + ) + entry.save() + run_process_media(entry, feed_url) + + return activity diff --git a/mediagoblin/submit/views.py b/mediagoblin/submit/views.py index 42c378a8..ccdd70bc 100644 --- a/mediagoblin/submit/views.py +++ b/mediagoblin/submit/views.py @@ -14,6 +14,8 @@ # 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 six + from mediagoblin import messages import mediagoblin.mg_globals as mg_globals @@ -27,8 +29,7 @@ from mediagoblin.tools.response import render_to_response, redirect from mediagoblin.decorators import require_active_login, user_has_privilege from mediagoblin.submit import forms as submit_forms from mediagoblin.messages import add_message, SUCCESS -from mediagoblin.media_types import \ - InvalidFileType, FileTypeNotSupported +from mediagoblin.media_types import FileTypeNotSupported from mediagoblin.submit.lib import \ check_file_field, submit_media, get_upload_file_limits, \ FileUploadLimit, UserUploadLimit, UserPastUploadLimit @@ -59,9 +60,9 @@ def submit_start(request): mg_app=request.app, user=request.user, submitted_file=request.files['file'], filename=request.files['file'].filename, - title=unicode(submit_form.title.data), - description=unicode(submit_form.description.data), - license=unicode(submit_form.license.data) or None, + title=six.text_type(submit_form.title.data), + description=six.text_type(submit_form.description.data), + license=six.text_type(submit_form.license.data) or None, tags_string=submit_form.tags.data, upload_limit=upload_limit, max_file_size=max_file_size, urlgen=request.urlgen) @@ -87,18 +88,10 @@ def submit_start(request): _('Sorry, you have reached your upload limit.')) return redirect(request, "mediagoblin.user_pages.user_home", user=request.user.username) - + except FileTypeNotSupported as e: + submit_form.file.errors.append(e) except Exception as e: - ''' - This section is intended to catch exceptions raised in - mediagoblin.media_types - ''' - if isinstance(e, InvalidFileType) or \ - isinstance(e, FileTypeNotSupported): - submit_form.file.errors.append( - e) - else: - raise + raise return render_to_response( request, @@ -117,8 +110,8 @@ def add_collection(request, media=None): if request.method == 'POST' and submit_form.validate(): collection = request.db.Collection() - collection.title = unicode(submit_form.title.data) - collection.description = unicode(submit_form.description.data) + collection.title = six.text_type(submit_form.title.data) + collection.description = six.text_type(submit_form.description.data) collection.creator = request.user.id collection.generate_slug() |