def podcast_data(obj, domain, scaled_logo_size=64): if obj is None: raise ValueError('podcast should not be None') if isinstance(obj, SubscribedPodcast): url = obj.ref_url podcast = obj.podcast else: podcast = obj url = podcast.url subscribers = podcast.subscribers last_subscribers = podcast.subscribers scaled_logo_url = get_logo_url(podcast, scaled_logo_size) return { "url": url, "title": podcast.title, "description": podcast.description, "subscribers": subscribers, "subscribers_last_week": last_subscribers, "logo_url": podcast.logo_url, "scaled_logo_url": 'http://%s%s' % (domain, scaled_logo_url), "website": podcast.link, "mygpo_link": 'http://%s%s' % (domain, get_podcast_link_target(podcast)), }
def create_podcast_logo(podcast, size): if not podcast: return '' size = int(size) s = '<img src="%s" alt="" />' % (get_logo_url(podcast, size),) return mark_safe(s)
def podcast_data(obj, domain, scaled_logo_size=64): if obj is None: raise ValueError('podcast should not be None') if isinstance(obj, SubscribedPodcast): url = obj.ref_url podcast = obj.podcast else: podcast = obj url = podcast.url subscribers = podcast.subscribers scaled_logo_url = get_logo_url(podcast, scaled_logo_size) return { "url": url, "title": podcast.title, "author": podcast.author, "description": podcast.description, "subscribers": subscribers, "logo_url": podcast.logo_url, "scaled_logo_url": 'http://%s%s' % (domain, scaled_logo_url), "website": podcast.link, "mygpo_link": 'http://%s%s' % (domain, get_podcast_link_target(podcast)), }
def test_get_nonexisting(self): URL = 'http://example.com/non-existing-logo.png' self.podcast.logo_url = URL logo_url = get_logo_url(self.podcast, 32) response = self.client.get(logo_url) self.assertEqual(404, response.status_code)
def opengraph_episode(episode, podcast): s = OPENGRAPH_STR % dict( title = episode.title, type = 'episode', image = 'http://gpodder.net%s' % get_logo_url(podcast, PODCAST_LOGO_BIG_SIZE), url = 'http://gpodder.net%s' % get_episode_link_target(episode, podcast), site_name = 'gpodder.net', admins = '0' ) return s
def opengraph_podcast(podcast): s = OPENGRAPH_STR % dict( title=podcast.title, type='episode', image='http://gpodder.net%s' % get_logo_url(podcast, PODCAST_LOGO_BIG_SIZE), url='http://gpodder.net%s' % get_podcast_link_target(podcast), site_name='gpodder.net', admins='0') return mark_safe(s)
def opengraph_podcast(podcast): s = OPENGRAPH_STR % dict( title=podcast.title, type='episode', image='http://gpodder.net%s' % get_logo_url(podcast, PODCAST_LOGO_BIG_SIZE), url='http://gpodder.net%s' % get_podcast_link_target(podcast), site_name='gpodder.net', admins='0', ) return mark_safe(s)
def opengraph_podcast(podcast): s = OPENGRAPH_STR % dict( title=podcast.title, type="episode", image="http://gpodder.net%s" % get_logo_url(podcast, PODCAST_LOGO_BIG_SIZE), url="http://gpodder.net%s" % get_podcast_link_target(podcast), site_name="gpodder.net", admins="0", ) return mark_safe(s)
def opengraph_episode(episode, podcast): s = OPENGRAPH_STR % dict( title=episode.title, type='episode', image='http://gpodder.net%s' % get_logo_url(podcast, PODCAST_LOGO_BIG_SIZE), url='http://gpodder.net%s' % get_episode_link_target(episode, podcast), site_name='gpodder.net', admins='0', ) return s
def _fetch_cover(self, podcast, size=32): logo_url = get_logo_url(podcast, size) response = self.client.get(logo_url) self.assertEqual(302, response.status_code) redir = response['Location'] logger.warning('Redirecting to {}'.format(redir)) response = self.client.get(redir) self.assertEqual(200, response.status_code) return response
def _fetch_cover(self, podcast, size=32): logo_url = get_logo_url(podcast, size) response = self.client.get(logo_url) self.assertEqual(302, response.status_code) redir = response['Location'] logger.warn('Redirecting to {}'.format(redir)) response = self.client.get(redir) self.assertEqual(200, response.status_code) return response
def test_get_existing_thumbnail(self): """ Retrieve an already existing thumbnail No distinction is visible outside, but it covers different code paths """ self._save_logo() logo_url = get_logo_url(self.podcast, 32) response = self.client.get(logo_url) self.assertEqual(302, response.status_code, response.content) response = self.client.get(logo_url) self.assertEqual(302, response.status_code, response.content)
def test_new_logo(self): with responses.RequestsMock() as rsps, open( IMG_PATH1, 'rb') as body1, open(IMG_PATH1, 'rb') as body2, open(IMG_PATH2, 'rb') as body3: rsps.add( responses.GET, self.URL, status=200, body=body1, content_type='image/png', ) rsps.add( responses.GET, self.URL, status=200, body=body2, content_type='image/png', ) rsps.add( responses.GET, self.URL, status=200, body=body3, content_type='image/png', ) logo_url = get_logo_url(self.podcast, 32) # first request CoverArt.save_podcast_logo(self.URL) response1 = self._fetch_cover(self.podcast) # stayed the same CoverArt.save_podcast_logo(self.URL) response2 = self._fetch_cover(self.podcast) self.assertEqual(list(response1.streaming_content), list(response2.streaming_content)) # changed CoverArt.save_podcast_logo(self.URL) response3 = self._fetch_cover(self.podcast) self.assertNotEqual(list(response2.streaming_content), list(response3.streaming_content))
def test_new_logo(self): with responses.RequestsMock() as rsps, open(IMG_PATH1, 'rb') as body1, open( IMG_PATH1, 'rb' ) as body2, open(IMG_PATH2, 'rb') as body3: rsps.add( responses.GET, self.URL, status=200, body=body1, content_type='image/png', ) rsps.add( responses.GET, self.URL, status=200, body=body2, content_type='image/png', ) rsps.add( responses.GET, self.URL, status=200, body=body3, content_type='image/png', ) logo_url = get_logo_url(self.podcast, 32) # first request CoverArt.save_podcast_logo(self.URL) response1 = self._fetch_cover(self.podcast) # stayed the same CoverArt.save_podcast_logo(self.URL) response2 = self._fetch_cover(self.podcast) self.assertEqual( list(response1.streaming_content), list(response2.streaming_content) ) # changed CoverArt.save_podcast_logo(self.URL) response3 = self._fetch_cover(self.podcast) self.assertNotEqual( list(response2.streaming_content), list(response3.streaming_content) )
def test_error_open_file(self): class ErrFileSystemStorage(FileSystemStorage): def open(*args, **kwargs): raise IOError self._save_logo() from mygpo.web import logo _logo_storage = logo.LOGO_STORAGE logo.LOGO_STORAGE = ErrFileSystemStorage(location=settings.MEDIA_ROOT) logo_url = get_logo_url(self.podcast, 32) response = self.client.get(logo_url) self.assertEqual(404, response.status_code) logo.LOGO_STORAGE = _logo_storage
def create_podcast_logo(podcast, size): if not podcast: return "" size = int(size) return '<img src="%s" alt="" />' % (get_logo_url(podcast, size),)