Refactor file field checking.

When uploading, the file field needs some checks, it seems.
So refactor them into check_file_field and use around.
This commit is contained in:
Elrond 2013-03-22 15:45:21 +01:00
parent 9924cd0fb6
commit 2ef2f46e73
3 changed files with 17 additions and 10 deletions

View File

@ -18,7 +18,6 @@ import json
import logging import logging
from os.path import splitext from os.path import splitext
from werkzeug.datastructures import FileStorage
from werkzeug.exceptions import BadRequest, Forbidden from werkzeug.exceptions import BadRequest, Forbidden
from werkzeug.wrappers import Response from werkzeug.wrappers import Response
@ -27,7 +26,8 @@ from mediagoblin.meddleware.csrf import csrf_exempt
from mediagoblin.media_types import sniff_media from mediagoblin.media_types import sniff_media
from mediagoblin.plugins.api.tools import api_auth, get_entry_serializable, \ from mediagoblin.plugins.api.tools import api_auth, get_entry_serializable, \
json_response json_response
from mediagoblin.submit.lib import prepare_queue_task, run_process_media from mediagoblin.submit.lib import check_file_field, prepare_queue_task, \
run_process_media
_log = logging.getLogger(__name__) _log = logging.getLogger(__name__)
@ -45,9 +45,7 @@ def post_entry(request):
_log.debug('Must POST against post_entry') _log.debug('Must POST against post_entry')
raise BadRequest() raise BadRequest()
if not 'file' in request.files \ if not check_file_field(request, 'file'):
or not isinstance(request.files['file'], FileStorage) \
or not request.files['file'].stream:
_log.debug('File field not found') _log.debug('File field not found')
raise BadRequest() raise BadRequest()

View File

@ -17,6 +17,7 @@
import logging import logging
import uuid import uuid
from werkzeug.utils import secure_filename from werkzeug.utils import secure_filename
from werkzeug.datastructures import FileStorage
from mediagoblin.processing import mark_entry_failed from mediagoblin.processing import mark_entry_failed
from mediagoblin.processing.task import process_media from mediagoblin.processing.task import process_media
@ -25,6 +26,16 @@ from mediagoblin.processing.task import process_media
_log = logging.getLogger(__name__) _log = logging.getLogger(__name__)
def check_file_field(request, field_name):
"""Check if a file field meets minimal criteria"""
retval = (field_name in request.files
and isinstance(request.files[field_name], FileStorage)
and request.files[field_name].stream)
if not retval:
_log.debug("Form did not contain proper file field %s", field_name)
return retval
def prepare_queue_task(app, entry, filename): def prepare_queue_task(app, entry, filename):
""" """
Prepare a MediaEntry for the processing queue and get a queue file Prepare a MediaEntry for the processing queue and get a queue file

View File

@ -22,7 +22,6 @@ import logging
_log = logging.getLogger(__name__) _log = logging.getLogger(__name__)
from werkzeug.datastructures import FileStorage
from mediagoblin.tools.text import convert_to_tag_list_of_dicts from mediagoblin.tools.text import convert_to_tag_list_of_dicts
from mediagoblin.tools.translate import pass_to_ugettext as _ from mediagoblin.tools.translate import pass_to_ugettext as _
@ -32,7 +31,8 @@ from mediagoblin.submit import forms as submit_forms
from mediagoblin.messages import add_message, SUCCESS from mediagoblin.messages import add_message, SUCCESS
from mediagoblin.media_types import sniff_media, \ from mediagoblin.media_types import sniff_media, \
InvalidFileType, FileTypeNotSupported InvalidFileType, FileTypeNotSupported
from mediagoblin.submit.lib import run_process_media, prepare_queue_task from mediagoblin.submit.lib import check_file_field, prepare_queue_task, \
run_process_media
@require_active_login @require_active_login
@ -44,9 +44,7 @@ def submit_start(request):
license=request.user.license_preference) license=request.user.license_preference)
if request.method == 'POST' and submit_form.validate(): if request.method == 'POST' and submit_form.validate():
if not ('file' in request.files if not check_file_field(request, 'file'):
and isinstance(request.files['file'], FileStorage)
and request.files['file'].stream):
submit_form.file.errors.append( submit_form.file.errors.append(
_(u'You must provide a file.')) _(u'You must provide a file.'))
else: else: