aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristopher Allan Webber <cwebber@dustycloud.org>2013-11-14 11:07:12 -0600
committerChristopher Allan Webber <cwebber@dustycloud.org>2013-11-14 11:07:12 -0600
commit860b380bb5ccfb3f752f13d79fd43c6bd7fb428b (patch)
tree48759342b20c70525275eb1bdc6d310c069aaeea
parent5d754da741994ad3364fce6c57c1786b63ef292f (diff)
downloadmediagoblin-860b380bb5ccfb3f752f13d79fd43c6bd7fb428b.tar.lz
mediagoblin-860b380bb5ccfb3f752f13d79fd43c6bd7fb428b.tar.xz
mediagoblin-860b380bb5ccfb3f752f13d79fd43c6bd7fb428b.zip
Porting the piwigo submit system over to using the new submit utility.
This also adds upload limit checks to the piwigo plugin! This commit sponsored by Sam Black. Thank you!
-rw-r--r--mediagoblin/plugins/piwigo/views.py95
1 files changed, 38 insertions, 57 deletions
diff --git a/mediagoblin/plugins/piwigo/views.py b/mediagoblin/plugins/piwigo/views.py
index ca723189..099a1096 100644
--- a/mediagoblin/plugins/piwigo/views.py
+++ b/mediagoblin/plugins/piwigo/views.py
@@ -16,17 +16,17 @@
import logging
import re
-from os.path import splitext
-import shutil
from werkzeug.exceptions import MethodNotAllowed, BadRequest, NotImplemented
from werkzeug.wrappers import BaseResponse
+from mediagoblin.tools.translate import pass_to_ugettext as _
from mediagoblin.meddleware.csrf import csrf_exempt
from mediagoblin.auth.tools import check_login_simple
-from mediagoblin.media_types import sniff_media
-from mediagoblin.submit.lib import check_file_field, prepare_queue_task, \
- run_process_media, new_upload_entry
+from mediagoblin.submit.lib import \
+ submit_media, check_file_field, get_upload_file_limits, \
+ FileUploadLimit, UserUploadLimit, UserPastUploadLimit
+
from mediagoblin.user_pages.lib import add_media_to_collection
from mediagoblin.db.models import Collection
@@ -126,58 +126,39 @@ def pwg_images_addSimple(request):
if not check_file_field(request, 'image'):
raise BadRequest()
- filename = request.files['image'].filename
-
- # Sniff the submitted media to determine which
- # media plugin should handle processing
- media_type, media_manager = sniff_media(
- request.files['image'])
-
- # create entry and save in database
- entry = new_upload_entry(request.user)
- entry.media_type = unicode(media_type)
- entry.title = (
- unicode(form.name.data)
- or unicode(splitext(filename)[0]))
-
- entry.description = unicode(form.comment.data)
-
- '''
- # Process the user's folksonomy "tags"
- entry.tags = convert_to_tag_list_of_dicts(
- form.tags.data)
- '''
-
- # Generate a slug from the title
- entry.generate_slug()
-
- queue_file = prepare_queue_task(request.app, entry, filename)
-
- with queue_file:
- shutil.copyfileobj(request.files['image'].stream,
- queue_file,
- length=4 * 1048576)
-
- # Save now so we have this data before kicking off processing
- 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)
- feed_url = request.urlgen(
- 'mediagoblin.user_pages.atom_feed',
- qualified=True, user=request.user.username)
- run_process_media(entry, feed_url)
-
- collection_id = form.category.data
- if collection_id > 0:
- collection = Collection.query.get(collection_id)
- if collection is not None and collection.creator == request.user.id:
- add_media_to_collection(collection, entry, "")
-
- return {'image_id': entry.id, 'url': entry.url_for_self(request.urlgen,
- qualified=True)}
+ upload_limit, max_file_size = get_upload_file_limits(request.user)
+
+ try:
+ entry = submit_media(
+ request.app, request.user,
+ request.files['image'], request.files['image'].filename,
+ unicode(form.name.data),
+ unicode(form.comment.data),
+ upload_limit, max_file_size)
+
+ collection_id = form.category.data
+ if collection_id > 0:
+ collection = Collection.query.get(collection_id)
+ if collection is not None and collection.creator == request.user.id:
+ add_media_to_collection(collection, entry, "")
+
+ return {
+ 'image_id': entry.id,
+ 'url': entry.url_for_self(
+ request.urlgen,
+ qualified=True)}
+
+ # Handle upload limit issues
+ except FileUploadLimit:
+ raise BadRequest(
+ _(u'Sorry, the file size is too big.'))
+ except UserUploadLimit:
+ raise BadRequest(
+ _('Sorry, uploading this file will put you over your'
+ ' upload limit.'))
+ except UserPastUploadLimit:
+ raise BadRequest(
+ _('Sorry, you have reached your upload limit.'))
md5sum_matcher = re.compile(r"^[0-9a-fA-F]{32}$")