modified gmg to use plugin media_types and converted image media_type to new plugin style
This commit is contained in:
@@ -15,12 +15,10 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import os
|
||||
import sys
|
||||
import logging
|
||||
import tempfile
|
||||
|
||||
from mediagoblin import mg_globals
|
||||
from mediagoblin.tools.common import import_component
|
||||
from mediagoblin.tools.pluginapi import hook_handle
|
||||
from mediagoblin.tools.translate import lazy_pass_to_ugettext as _
|
||||
|
||||
_log = logging.getLogger(__name__)
|
||||
@@ -56,7 +54,7 @@ class CompatMediaManager(object):
|
||||
def __init__(self, mm_dict, entry=None):
|
||||
self.mm_dict = mm_dict
|
||||
self.entry = entry
|
||||
|
||||
|
||||
def __call__(self, entry):
|
||||
"So this object can look like a class too, somehow"
|
||||
assert self.entry is None
|
||||
@@ -98,40 +96,18 @@ def sniff_media(media):
|
||||
media_file.write(media.stream.read())
|
||||
media.stream.seek(0)
|
||||
|
||||
for media_type, manager in get_media_managers():
|
||||
_log.info('Sniffing {0}'.format(media_type))
|
||||
if manager.sniff_handler(media_file, media=media):
|
||||
_log.info('{0} accepts the file'.format(media_type))
|
||||
return media_type, manager
|
||||
else:
|
||||
_log.debug('{0} did not accept the file'.format(media_type))
|
||||
media_type = hook_handle('sniff_handler', media_file, media=media)
|
||||
if media_type:
|
||||
_log.info('{0} accepts the file'.format(media_type))
|
||||
return media_type, hook_handle('get_media_managers', media_type)
|
||||
else:
|
||||
_log.debug('{0} did not accept the file'.format(media_type))
|
||||
|
||||
raise FileTypeNotSupported(
|
||||
# TODO: Provide information on which file types are supported
|
||||
_(u'Sorry, I don\'t support that file type :('))
|
||||
|
||||
|
||||
def get_media_types():
|
||||
"""
|
||||
Generator, yields the available media types
|
||||
"""
|
||||
for media_type in mg_globals.app_config['media_types']:
|
||||
yield media_type
|
||||
|
||||
|
||||
def get_media_managers():
|
||||
'''
|
||||
Generator, yields all enabled media managers
|
||||
'''
|
||||
for media_type in get_media_types():
|
||||
mm = import_component(media_type + ":MEDIA_MANAGER")
|
||||
|
||||
if isinstance(mm, dict):
|
||||
mm = CompatMediaManager(mm)
|
||||
|
||||
yield media_type, mm
|
||||
|
||||
|
||||
def get_media_type_and_manager(filename):
|
||||
'''
|
||||
Try to find the media type based on the file name, extension
|
||||
@@ -142,11 +118,10 @@ def get_media_type_and_manager(filename):
|
||||
# Get the file extension
|
||||
ext = os.path.splitext(filename)[1].lower()
|
||||
|
||||
for media_type, manager in get_media_managers():
|
||||
# Omit the dot from the extension and match it against
|
||||
# the media manager
|
||||
if ext[1:] in manager.accepted_extensions:
|
||||
return media_type, manager
|
||||
# Omit the dot from the extension and match it against
|
||||
# the media manager
|
||||
if hook_handle('get_media_type_and_manager', ext[1:]):
|
||||
return hook_handle('get_media_type_and_manager', ext[1:])
|
||||
else:
|
||||
_log.info('File {0} has no file extension, let\'s hope the sniffers get it.'.format(
|
||||
filename))
|
||||
|
||||
@@ -13,12 +13,20 @@
|
||||
#
|
||||
# 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 datetime
|
||||
|
||||
from mediagoblin.media_types import MediaManagerBase
|
||||
from mediagoblin.media_types.image.processing import process_image, \
|
||||
sniff_handler
|
||||
from mediagoblin.tools import pluginapi
|
||||
|
||||
|
||||
ACCEPTED_EXTENSIONS = ["jpg", "jpeg", "png", "gif", "tiff"]
|
||||
MEDIA_TYPE = 'mediagoblin.media_types.image'
|
||||
|
||||
|
||||
def setup_plugin():
|
||||
config = pluginapi.get_config('mediagoblin.pluginapi.media_types.image')
|
||||
|
||||
|
||||
class ImageMediaManager(MediaManagerBase):
|
||||
@@ -27,9 +35,9 @@ class ImageMediaManager(MediaManagerBase):
|
||||
sniff_handler = staticmethod(sniff_handler)
|
||||
display_template = "mediagoblin/media_displays/image.html"
|
||||
default_thumb = "images/media_thumbs/image.png"
|
||||
accepted_extensions = ["jpg", "jpeg", "png", "gif", "tiff"]
|
||||
|
||||
media_fetch_order = [u'medium', u'original', u'thumb']
|
||||
|
||||
|
||||
def get_original_date(self):
|
||||
"""
|
||||
Get the original date and time from the EXIF information. Returns
|
||||
@@ -52,4 +60,19 @@ class ImageMediaManager(MediaManagerBase):
|
||||
return None
|
||||
|
||||
|
||||
MEDIA_MANAGER = ImageMediaManager
|
||||
def get_media_manager(media_type):
|
||||
if media_type == MEDIA_TYPE:
|
||||
return ImageMediaManager
|
||||
|
||||
|
||||
def get_media_type_and_manager(ext):
|
||||
if ext in ACCEPTED_EXTENSIONS:
|
||||
return ImageMediaManager
|
||||
|
||||
|
||||
hooks = {
|
||||
'setup': setup_plugin,
|
||||
'extensions': get_media_type_and_manager,
|
||||
'sniff_handler': sniff_handler,
|
||||
'get_media_manager': get_media_manager,
|
||||
}
|
||||
|
||||
@@ -35,6 +35,8 @@ PIL_FILTERS = {
|
||||
'BICUBIC': Image.BICUBIC,
|
||||
'ANTIALIAS': Image.ANTIALIAS}
|
||||
|
||||
MEDIA_TYPE = 'mediagoblin.media_types.image'
|
||||
|
||||
|
||||
def resize_image(proc_state, resized, keyname, target_name, new_size,
|
||||
exif_tags, workdir):
|
||||
@@ -99,13 +101,14 @@ SUPPORTED_FILETYPES = ['png', 'gif', 'jpg', 'jpeg']
|
||||
|
||||
|
||||
def sniff_handler(media_file, **kw):
|
||||
_log.info('Sniffing {0}'.format(MEDIA_TYPE))
|
||||
if kw.get('media') is not None: # That's a double negative!
|
||||
name, ext = os.path.splitext(kw['media'].filename)
|
||||
clean_ext = ext[1:].lower() # Strip the . from ext and make lowercase
|
||||
|
||||
if clean_ext in SUPPORTED_FILETYPES:
|
||||
_log.info('Found file extension in supported filetypes')
|
||||
return True
|
||||
return MEDIA_TYPE
|
||||
else:
|
||||
_log.debug('Media present, extension not found in {0}'.format(
|
||||
SUPPORTED_FILETYPES))
|
||||
@@ -113,7 +116,7 @@ def sniff_handler(media_file, **kw):
|
||||
_log.warning('Need additional information (keyword argument \'media\')'
|
||||
' to be able to handle sniffing')
|
||||
|
||||
return False
|
||||
return None
|
||||
|
||||
|
||||
def process_image(proc_state):
|
||||
|
||||
Reference in New Issue
Block a user