diff options
Diffstat (limited to 'mediagoblin/db/mixin.py')
-rw-r--r-- | mediagoblin/db/mixin.py | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/mediagoblin/db/mixin.py b/mediagoblin/db/mixin.py index a8436c70..001b7826 100644 --- a/mediagoblin/db/mixin.py +++ b/mediagoblin/db/mixin.py @@ -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 @@ -56,8 +58,7 @@ class MediaEntryMixin(object): self.slug = slugify(self.title) - duplicate = check_media_slug_used(mg_globals.database, - self.uploader, self.slug, self.id) + duplicate = check_media_slug_used(self.uploader, self.slug, self.id) if duplicate: if self.id is not None: @@ -97,13 +98,14 @@ class MediaEntryMixin(object): @property def slug_or_id(self): - return (self.slug or self._id) + return (self.slug or self.id) + def url_for_self(self, urlgen, **extra_args): """ Generate an appropriate url for ourselves - Use a slug if we have one, else use our '_id'. + Use a slug if we have one, else use our 'id'. """ uploader = self.get_uploader @@ -125,11 +127,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 @@ -190,13 +207,13 @@ class CollectionMixin(object): @property def slug_or_id(self): - return (self.slug or self._id) + return (self.slug or self.id) def url_for_self(self, urlgen, **extra_args): """ Generate an appropriate url for ourselves - Use a slug if we have one, else use our '_id'. + Use a slug if we have one, else use our 'id'. """ creator = self.get_creator |