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:
parent
5202924c91
commit
301da9caba
@ -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))
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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()
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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:
|
||||||
|
@ -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(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user