def get(self, id=None, slug=None, **kwargs): """Expose info on a specific media item by ID or slug. :param id: A :attr:`mediacore.model.media.Media.id` for lookup :type id: int :param slug: A :attr:`mediacore.model.media.Media.slug` for lookup :type slug: str :raises webob.exc.HTTPNotFound: If the media doesn't exist. :returns: JSON dict """ query = Media.query.published() if id: query = query.filter_by(id=id) else: query = query.filter_by(slug=slug) try: media = query.one() except orm.exc.NoResultFound: raise webob.exc.HTTPNotFound info = self._info(media) info['embed'] = helpers.embeddable_player(media) return info
def _info(self, media, podcast_slugs=None, include_embed=False): """Return a JSON-ready dict for the given media instance""" if media.podcast_id: media_url = url_for(controller='/media', action='view', slug=media.slug, podcast_slug=media.podcast.slug, qualified=True) else: media_url = url_for(controller="/media", action="view", slug=media.slug, qualified=True) if media.podcast_id is None: podcast_slug = None elif podcast_slugs: podcast_slug = podcast_slugs[media.podcast_id] else: podcast_slug = DBSession.query(Podcast.slug)\ .filter_by(id=media.podcast_id).scalar() thumbs = {} for size in config['thumb_sizes'][media._thumb_dir].iterkeys(): thumbs[size] = thumb(media, size, qualified=True) info = dict( id = media.id, slug = media.slug, url = media_url, title = media.title, author = media.author.name, type = media.type, podcast = podcast_slug, description = media.description, description_plain = media.description_plain, comment_count = media.comment_count_published, publish_on = unicode(media.publish_on), likes = media.likes, views = media.views, thumbs = thumbs, categories = dict((c.slug, c.name) for c in list(media.categories)), ) if include_embed: info['embed'] = helpers.embeddable_player(media) return info