make media_manager a property of MediaEntry in mixin.py
In all cases where get_media_manager(_media_type_as_string) was called in our code base we ultimately passed in a "MediaEntry().media_type" to get the matching MEDIA_MANAGER. It so makes sense to make this a function of the MediaEntry rather than a global function in mediagoblin.media_types and passing around media_entry.media_type as arguments all the time. It saves a few import statements and arguments. I also made it so the Media_manager property is cached for subsequent calls, although I am not too sure that this is needed (there are other cases for which this would make more sense) Also add a get_media_manager test to the media submission tests. It submits an image and checks that both media.media_type and media.media_manager return the right thing. Not sure if these tests could not be merged with an existing submission test, but it can't hurt to have things explicit. TODO: Right now we iterate through all existing media_managers to find the right one based on the string of its module name. This should be made a simple dict lookup to avoid all the extra work. Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
This commit is contained in:
@@ -27,9 +27,11 @@ These functions now live here and get "mixed in" into the
|
||||
real objects.
|
||||
"""
|
||||
|
||||
from werkzeug.utils import cached_property
|
||||
|
||||
from mediagoblin import mg_globals
|
||||
from mediagoblin.auth import lib as auth_lib
|
||||
from mediagoblin.media_types import get_media_manager
|
||||
from mediagoblin.media_types import get_media_managers, FileTypeNotSupported
|
||||
from mediagoblin.tools import common, licenses
|
||||
from mediagoblin.tools.text import cleaned_markdown_conversion
|
||||
from mediagoblin.tools.url import slugify
|
||||
@@ -99,6 +101,7 @@ class MediaEntryMixin(object):
|
||||
def slug_or_id(self):
|
||||
return (self.slug or self._id)
|
||||
|
||||
|
||||
def url_for_self(self, urlgen, **extra_args):
|
||||
"""
|
||||
Generate an appropriate url for ourselves
|
||||
@@ -125,11 +128,26 @@ class MediaEntryMixin(object):
|
||||
else:
|
||||
# No thumbnail in media available. Get the media's
|
||||
# MEDIA_MANAGER for the fallback icon and return static URL
|
||||
# Raise FileTypeNotSupported in case no such manager is enabled
|
||||
manager = get_media_manager(self.media_type)
|
||||
# Raises FileTypeNotSupported in case no such manager is enabled
|
||||
manager = self.media_manager
|
||||
thumb_url = mg_globals.app.staticdirector(manager[u'default_thumb'])
|
||||
return thumb_url
|
||||
|
||||
@cached_property
|
||||
def media_manager(self):
|
||||
"""Returns the MEDIA_MANAGER of the media's media_type
|
||||
|
||||
Raises FileTypeNotSupported in case no such manager is enabled
|
||||
"""
|
||||
# TODO, we should be able to make this a simple lookup rather
|
||||
# than iterating through all media managers.
|
||||
for media_type, manager in get_media_managers():
|
||||
if media_type == self.media_type:
|
||||
return manager
|
||||
# Not found? Then raise an error
|
||||
raise FileTypeNotSupported(
|
||||
"MediaManager not in enabled types. Check media_types in config?")
|
||||
|
||||
def get_fail_exception(self):
|
||||
"""
|
||||
Get the exception that's appropriate for this error
|
||||
|
||||
Reference in New Issue
Block a user