real objects.
"""
+import importlib
+
from mediagoblin import mg_globals
from mediagoblin.auth import lib as auth_lib
from mediagoblin.tools import common, licenses
if duplicate:
if self.id is not None:
- self.slug = "%s-%s" % (self.id, self.slug)
+ self.slug = u"%s-%s" % (self.id, self.slug)
else:
self.slug = None
media=self.slug_or_id,
**extra_args)
+ @property
+ def thumb_url(self):
+ """Return the thumbnail URL (for usage in templates)
+ Will return either the real thumbnail or a default fallback icon."""
+ # TODO: implement generic fallback in case MEDIA_MANAGER does
+ # not specify one?
+ if u'thumb' in self.media_files:
+ thumb_url = mg_globals.app.public_store.file_url(
+ self.media_files[u'thumb'])
+ else:
+ # no thumbnail in media available. Get the media's
+ # MEDIA_MANAGER for the fallback icon and return static URL
+ manager = importlib.import_module(self.media_type)
+ thumb_url = manager.MEDIA_MANAGER[u'default_thumb']
+ thumb_url = mg_globals.app.staticdirector(thumb_url) # use static
+ return thumb_url
+
def get_fail_exception(self):
"""
Get the exception that's appropriate for this error
"""
- if self['fail_error']:
- return common.import_component(self['fail_error'])
+ if self.fail_error:
+ return common.import_component(self.fail_error)
def get_license_data(self):
"""Return license dict for requested license"""
Run through Markdown and the HTML cleaner.
"""
return cleaned_markdown_conversion(self.content)
+
+
+class CollectionMixin(object):
+ def generate_slug(self):
+ # import this here due to a cyclic import issue
+ # (db.models -> db.mixin -> db.util -> db.models)
+ from mediagoblin.db.util import check_collection_slug_used
+
+ self.slug = slugify(self.title)
+
+ duplicate = check_collection_slug_used(mg_globals.database,
+ self.creator, self.slug, self.id)
+
+ if duplicate:
+ if self.id is not None:
+ self.slug = u"%s-%s" % (self.id, self.slug)
+ else:
+ self.slug = None
+
+ @property
+ def description_html(self):
+ """
+ Rendered version of the description, run through
+ Markdown and cleaned with our cleaning tool.
+ """
+ return cleaned_markdown_conversion(self.description)
+
+ @property
+ 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
+
+ Use a slug if we have one, else use our '_id'.
+ """
+ creator = self.get_creator
+
+ return urlgen(
+ 'mediagoblin.user_pages.user_collection',
+ user=creator.username,
+ collection=self.slug_or_id,
+ **extra_args)
+
+
+class CollectionItemMixin(object):
+ @property
+ def note_html(self):
+ """
+ the actual html-rendered version of the note displayed.
+ Run through Markdown and the HTML cleaner.
+ """
+ return cleaned_markdown_conversion(self.note)