Generic'ifying the submit code to not rely on the werkzeug FileStorage datastructure

Important, because that only makes sense for wsgi! :)

This commit sponsored by Geoff Lehr.  Thank you!
This commit is contained in:
Christopher Allan Webber 2013-11-13 19:39:18 -06:00
parent 5202924c91
commit 301da9caba
8 changed files with 39 additions and 49 deletions

View File

@ -50,23 +50,23 @@ class MediaManagerBase(object):
return hasattr(self, i) return hasattr(self, i)
def sniff_media(media): def sniff_media(media_file, filename):
''' '''
Iterate through the enabled media types and find those suited Iterate through the enabled media types and find those suited
for a certain file. for a certain file.
''' '''
try: try:
return get_media_type_and_manager(media.filename) return get_media_type_and_manager(filename)
except FileTypeNotSupported: except FileTypeNotSupported:
_log.info('No media handler found by file extension. Doing it the expensive way...') _log.info('No media handler found by file extension. Doing it the expensive way...')
# Create a temporary file for sniffers suchs as GStreamer-based # Create a temporary file for sniffers suchs as GStreamer-based
# Audio video # Audio video
media_file = tempfile.NamedTemporaryFile() tmp_media_file = tempfile.NamedTemporaryFile()
media_file.write(media.stream.read()) tmp_media_file.write(media_file.read())
media.stream.seek(0) tmp_media_file.seek(0)
media_type = hook_handle('sniff_handler', media_file, media=media) media_type = hook_handle('sniff_handler', tmp_media_file, filename)
if media_type: if media_type:
_log.info('{0} accepts the file'.format(media_type)) _log.info('{0} accepts the file'.format(media_type))
return media_type, hook_handle(('media_manager', media_type)) return media_type, hook_handle(('media_manager', media_type))

View File

@ -36,14 +36,14 @@ SUPPORTED_EXTENSIONS = ['txt', 'asc', 'nfo']
MEDIA_TYPE = 'mediagoblin.media_types.ascii' MEDIA_TYPE = 'mediagoblin.media_types.ascii'
def sniff_handler(media_file, **kw): def sniff_handler(media_file, filename):
_log.info('Sniffing {0}'.format(MEDIA_TYPE)) _log.info('Sniffing {0}'.format(MEDIA_TYPE))
if kw.get('media') is not None:
name, ext = os.path.splitext(kw['media'].filename)
clean_ext = ext[1:].lower()
if clean_ext in SUPPORTED_EXTENSIONS: name, ext = os.path.splitext(filename)
return MEDIA_TYPE clean_ext = ext[1:].lower()
if clean_ext in SUPPORTED_EXTENSIONS:
return MEDIA_TYPE
return None return None

View File

@ -33,7 +33,7 @@ _log = logging.getLogger(__name__)
MEDIA_TYPE = 'mediagoblin.media_types.audio' MEDIA_TYPE = 'mediagoblin.media_types.audio'
def sniff_handler(media_file, **kw): def sniff_handler(media_file, filename):
_log.info('Sniffing {0}'.format(MEDIA_TYPE)) _log.info('Sniffing {0}'.format(MEDIA_TYPE))
try: try:
transcoder = AudioTranscoder() transcoder = AudioTranscoder()

View File

@ -149,21 +149,17 @@ def _skip_resizing(entry, keyname, size, quality, filter):
SUPPORTED_FILETYPES = ['png', 'gif', 'jpg', 'jpeg', 'tiff'] SUPPORTED_FILETYPES = ['png', 'gif', 'jpg', 'jpeg', 'tiff']
def sniff_handler(media_file, **kw): def sniff_handler(media_file, filename):
_log.info('Sniffing {0}'.format(MEDIA_TYPE)) _log.info('Sniffing {0}'.format(MEDIA_TYPE))
if kw.get('media') is not None: # That's a double negative! name, ext = os.path.splitext(filename)
name, ext = os.path.splitext(kw['media'].filename) clean_ext = ext[1:].lower() # Strip the . from ext and make lowercase
clean_ext = ext[1:].lower() # Strip the . from ext and make lowercase
if clean_ext in SUPPORTED_FILETYPES: if clean_ext in SUPPORTED_FILETYPES:
_log.info('Found file extension in supported filetypes') _log.info('Found file extension in supported filetypes')
return MEDIA_TYPE return MEDIA_TYPE
else:
_log.debug('Media present, extension not found in {0}'.format(
SUPPORTED_FILETYPES))
else: else:
_log.warning('Need additional information (keyword argument \'media\')' _log.debug('Media present, extension not found in {0}'.format(
' to be able to handle sniffing') SUPPORTED_FILETYPES))
return None return None

View File

@ -168,18 +168,16 @@ def check_prerequisites():
return False return False
return True return True
def sniff_handler(media_file, **kw): def sniff_handler(media_file, filename):
_log.info('Sniffing {0}'.format(MEDIA_TYPE)) _log.info('Sniffing {0}'.format(MEDIA_TYPE))
if not check_prerequisites(): if not check_prerequisites():
return None return None
if kw.get('media') is not None:
name, ext = os.path.splitext(kw['media'].filename)
clean_ext = ext[1:].lower()
if clean_ext in supported_extensions(): name, ext = os.path.splitext(filename)
return MEDIA_TYPE clean_ext = ext[1:].lower()
return None if clean_ext in supported_extensions():
return MEDIA_TYPE
def create_pdf_thumb(original, thumb_filename, width, height): def create_pdf_thumb(original, thumb_filename, width, height):
# Note: pdftocairo adds '.png', remove it # Note: pdftocairo adds '.png', remove it

View File

@ -47,21 +47,18 @@ BLEND_SCRIPT = pkg_resources.resource_filename(
'blender_render.py')) 'blender_render.py'))
def sniff_handler(media_file, **kw): def sniff_handler(media_file, filename):
_log.info('Sniffing {0}'.format(MEDIA_TYPE)) _log.info('Sniffing {0}'.format(MEDIA_TYPE))
if kw.get('media') is not None:
name, ext = os.path.splitext(kw['media'].filename)
clean_ext = ext[1:].lower()
if clean_ext in SUPPORTED_FILETYPES: name, ext = os.path.splitext(filename)
_log.info('Found file extension in supported filetypes') clean_ext = ext[1:].lower()
return MEDIA_TYPE
else: if clean_ext in SUPPORTED_FILETYPES:
_log.debug('Media present, extension not found in {0}'.format( _log.info('Found file extension in supported filetypes')
SUPPORTED_FILETYPES)) return MEDIA_TYPE
else: else:
_log.warning('Need additional information (keyword argument \'media\')' _log.debug('Media present, extension not found in {0}'.format(
' to be able to handle sniffing') SUPPORTED_FILETYPES))
return None return None

View File

@ -44,7 +44,7 @@ class VideoTranscodingFail(BaseProcessingFail):
general_message = _(u'Video transcoding failed') general_message = _(u'Video transcoding failed')
def sniff_handler(media_file, **kw): def sniff_handler(media_file, filename):
transcoder = transcoders.VideoTranscoder() transcoder = transcoders.VideoTranscoder()
data = transcoder.discover(media_file.name) data = transcoder.discover(media_file.name)
@ -52,8 +52,7 @@ def sniff_handler(media_file, **kw):
_log.debug('Discovered: {0}'.format(data)) _log.debug('Discovered: {0}'.format(data))
if not data: if not data:
_log.error('Could not discover {0}'.format( _log.error('Could not discover {0}'.format(filename))
kw.get('media')))
return None return None
if data['is_video'] is True: if data['is_video'] is True:

View File

@ -115,7 +115,7 @@ def submit_media(mg_app, user, submitted_file, filename,
# Sniff the submitted media to determine which # Sniff the submitted media to determine which
# media plugin should handle processing # media plugin should handle processing
media_type, media_manager = sniff_media(submitted_file) media_type, media_manager = sniff_media(submitted_file, filename)
# create entry and save in database # create entry and save in database
entry = new_upload_entry(user) entry = new_upload_entry(user)
@ -135,7 +135,7 @@ def submit_media(mg_app, user, submitted_file, filename,
queue_file = prepare_queue_task(mg_app, entry, filename) queue_file = prepare_queue_task(mg_app, entry, filename)
with queue_file: with queue_file:
queue_file.write(submitted_file.stream.read()) queue_file.write(submitted_file.read())
# Get file size and round to 2 decimal places # Get file size and round to 2 decimal places
file_size = mg_app.queue_store.get_file_size( file_size = mg_app.queue_store.get_file_size(