コード例 #1
0
 async def giphy(self, *q : str):
     """Returns a random gif from a giphy search of phrase"""
     g = Giphy()
     phrase = " ".join(q)
     results = [x for x in g.search(phrase)]
     img = random.choice(results)
     await self.bot.say(img.media_url)
コード例 #2
0
ファイル: views.py プロジェクト: armenarmen/twit_gif
def get_gifs(trend):
    """a helper function that will return a list of gifs' urls for a
    given trend"""
    giphy = Giphy()
    results = giphy.search(trend)
    results = [result.media_url for result in results]
    return results
コード例 #3
0
ファイル: gifs.py プロジェクト: jferdizzle/concretespice
def get_giphy_results():
    results = []
    if os.environ.get('FEATURE_FLAG_GIF_RANDOMIZER', 'true') == 'true':
        return backup_gifs
    try:
        giphy = Giphy()
        for key in get_search_keys():
            results.extend([x.media_url for x in giphy.search(key)])
    except:
        results = backup_gifs
    shuffle(results)
    return results
コード例 #4
0
ファイル: tests.py プロジェクト: zekroTJA/giphypop
class GiphyTestCase(TestCase):

    def setUp(self):
        self.g = Giphy()

    def test_endpoint(self):
        assert self.g._endpoint('search') == 'http://api.giphy.com/v1/gifs/search'

    def test_check_or_raise_raises(self):
        self.assertRaises(GiphyApiException, self.g._check_or_raise, {'status': 400})

    def test_check_or_raise_no_status(self):
        self.assertRaises(GiphyApiException, self.g._check_or_raise, {})

    def test_check_or_raise(self):
        assert self.g._check_or_raise({'status': 200}) is None

    @patch('giphypop.requests')
    def test_fetch_error_raises(self, requests):
        # api returns error messages sorta like...
        err = {'meta': {'error_type': 'ERROR', 'code': 400, 'error_message': ''}}
        requests.get.return_value = requests
        requests.json.return_value = err

        self.assertRaises(GiphyApiException, self.g._fetch, 'foo')

    @patch('giphypop.requests')
    def test_fetch(self, requests):
        data = {'data': FAKE_DATA, 'meta': {'status': 200}}
        requests.get.return_value = requests
        requests.json.return_value = data

        assert self.g._fetch('foo') == data

    def fake_search_fetch(self, num_results, pages=3):
        self.g._fetch = Mock()
        self.g._fetch.return_value = {
            'data': [FAKE_DATA for x in range(num_results)],
            'pagination': {
                'total_count': pages * num_results,
                'count': 25,
                'offset': 0
            },
            'meta': {'status': 200}
        }

    def fake_trending_fetch(self, num_results, pages=3):
        self.g._fetch = Mock()
        self.g._fetch.return_value = {
            'data': [FAKE_DATA for x in range(num_results)],
            'pagination': {
                'total_count': pages * num_results,
                'count': 25,
                'offset': 0
            },
            'meta': {'status': 200}
        }

    def fake_fetch(self, result=FAKE_DATA):
        self.g._fetch = Mock()
        self.g._fetch.return_value = {
            'data': result or None,
            'meta': {'status': 200}
        }

    def test_search_no_results(self):
        self.fake_search_fetch(0, pages=1)
        results = list(self.g.search('foo'))
        assert len(results) == 0

    def test_search_respects_hard_limit(self):
        self.fake_search_fetch(25)
        results = list(self.g.search('foo', limit=10))
        assert len(results) == 10

    def test_search_handles_pages(self):
        self.fake_search_fetch(25)
        results = list(self.g.search('foo', limit=50))
        assert len(results) == 50

    def test_search_correctly_pages(self):
        self.fake_search_fetch(25, pages=2)
        list(self.g.search('foo', limit=50))
        calls = self.g._fetch.call_args_list

        assert len(calls) == 2
        assert calls[0][1]['offset'] == 0
        assert calls[1][1]['offset'] == 25

    def test_search_no_limit_returns_all(self):
        self.fake_search_fetch(25)
        results = list(self.g.search('foo', limit=None))
        assert len(results) == 75

    def test_search_list_returns_list(self):
        self.fake_search_fetch(25)
        results = self.g.search_list('foo', limit=10)
        assert isinstance(results, list)
        assert len(results) == 10

    def test_search_with_phrase_hyphenates(self):
        self.fake_search_fetch(0, pages=1)
        self.g.search(phrase='foo bar baz')
        assert self.g._fetch.called_with(q='foo-bar-baz')

    def test_translate_with_phrase_hyphenates(self):
        self.fake_fetch()
        self.g.translate(phrase='foo bar baz')
        assert self.g._fetch.called_with(s='foo-bar-baz')

    def test_translate(self):
        self.fake_fetch()
        assert isinstance(self.g.translate('foo'), GiphyImage)
        assert self.g._fetch.called_with('translate')

    def test_trending_no_results(self):
        self.fake_trending_fetch(0, pages=1)
        results = list(self.g.trending())
        assert len(results) == 0

    def test_trending_respects_hard_limit(self):
        self.fake_trending_fetch(25)
        results = list(self.g.trending(limit=10))
        assert len(results) == 10

    def test_trending_handles_pages(self):
        self.fake_trending_fetch(25)
        results = list(self.g.trending(limit=50))
        assert len(results) == 50

    def test_trending_correctly_pages(self):
        self.fake_trending_fetch(25, pages=2)
        list(self.g.trending(limit=50))
        calls = self.g._fetch.call_args_list

        assert len(calls) == 2
        assert calls[0][1]['offset'] == 0
        assert calls[1][1]['offset'] == 25

    def test_trending_no_limit_returns_all(self):
        self.fake_trending_fetch(25)
        results = list(self.g.trending(limit=None))
        assert len(results) == 75

    def test_trending_list_returns_list(self):
        self.fake_trending_fetch(25)
        results = self.g.trending_list(limit=10)
        assert isinstance(results, list)
        assert len(results) == 10

    def test_gif(self):
        self.fake_fetch()
        assert isinstance(self.g.gif('foo'), GiphyImage)
        assert self.g._fetch.called_with('foo')

    def test_screensaver(self):
        self.fake_fetch()
        assert isinstance(self.g.screensaver(), GiphyImage)

    def test_screensaver_passes_tag(self):
        self.fake_fetch()
        self.g.screensaver('foo')
        assert self.g._fetch.called_with(tag='foo')

    def test_random_gif(self):
        self.fake_fetch()
        assert isinstance(self.g.random_gif(), GiphyImage)

    def test_translate_returns_none(self):
        self.fake_fetch(result=None)
        assert self.g.translate('foo') is None

    def test_gif_returns_none(self):
        self.fake_fetch(result=None)
        assert self.g.gif('foo') is None

    def test_screensaver_returns_none(self):
        self.fake_fetch(result=None)
        assert self.g.screensaver('foo') is None

    def test_translate_raises_strict(self):
        self.fake_fetch(result=None)
        self.assertRaises(GiphyApiException, self.g.translate, 'foo', strict=True)

    def test_gif_returns_raises_strict(self):
        self.fake_fetch(result=None)
        self.assertRaises(GiphyApiException, self.g.gif, 'foo', strict=True)

    def test_screensaver_raises_strict(self):
        self.fake_fetch(result=None)
        self.assertRaises(GiphyApiException, self.g.screensaver, 'foo', strict=True)

    def test_strict_for_all(self):
        self.g = Giphy(strict=True)
        self.fake_fetch(result=None)

        self.assertRaises(GiphyApiException, self.g.translate, 'foo', strict=False)
        self.assertRaises(GiphyApiException, self.g.gif, 'foo', strict=False)
        self.assertRaises(GiphyApiException, self.g.screensaver, 'foo', strict=False)

    @patch('requests.post')
    def test_upload(self, post):
        resp = Mock()
        resp.json.return_value = {
            "data": {"id": "testid"},
            "meta": {"status": 200}
        }
        post.return_value = resp
        self.g.gif = Mock(return_value="test")
        self.assertEqual(self.g.upload(['foo', 'bar'], '/dev/null'), "test")
        self.assertTrue(post.called)
        self.g.gif.assert_called_with("testid")
コード例 #5
0
def giphy_search(keywords):
	g = Giphy()
	query = ' '.join(keywords)
	results = [x.media_url for x in g.search(query)]
	return results
コード例 #6
0
ファイル: tests.py プロジェクト: RebelMouseTeam/giphypop
class GiphyTestCase(TestCase):

    def runTest(self):
        pass

    def setUp(self):
        self.g = Giphy()

    def test_endpoint(self):
        assert self.g._endpoint('search') == 'http://api.giphy.com/v1/gifs/search'

    def test_check_or_raise_raises(self):
        self.assertRaises(GiphyApiException, self.g._check_or_raise, {'status': 400})

    def test_check_or_raise_no_status(self):
        self.assertRaises(GiphyApiException, self.g._check_or_raise, {})

    def test_check_or_raise(self):
        assert self.g._check_or_raise({'status': 200}) is None

    @patch('giphypop.requests')
    def test_fetch_error_raises(self, requests):
        # api returns error messages sorta like...
        err = {'meta': {'error_type': 'ERROR', 'code': 400, 'error_message': ''}}
        requests.get.return_value = requests
        requests.json.return_value = err

        self.assertRaises(GiphyApiException, self.g._fetch, 'foo')

    @patch('giphypop.requests')
    def test_fetch(self, requests):
        data = {'data': FAKE_DATA, 'meta': {'status': 200}}
        requests.get.return_value = requests
        requests.json = data

        assert self.g._fetch('foo') == data

    @patch('giphypop.requests')
    def test_fetch_sort_recent(self, requests):
        data = {'data': FAKE_DATA_RECENT, 'meta': {'status': 200}}
        requests.get.return_value = requests
        requests.json = data

        assert self.g._fetch('foo', recent=True) == data

    @patch('giphypop.requests')
    def test_fetch_data_sort_relevant(self, requests):
        data = {'data': FAKE_DATA_RELEVANT, 'meta': {'status': 200}}
        requests.get.return_value = requests
        requests.json = data

        assert self.g._fetch('foo') == data

    def fake_search_fetch(self, num_results, pages=3):
        self.g._fetch = Mock()
        self.g._fetch.return_value = {
            'data': [FAKE_DATA for x in range(num_results)],
            'pagination': {
                'total_count': pages,
                'count': 25,
                'offset': 0
            },
            'meta': {'status': 200}
        }

    def fake_search_fetch_recent(self):
        self.g._fetch = Mock()
        self.g._fetch.return_value = {
            'data': FAKE_DATA_RECENT,
            'pagination': {
                'total_count': 3,
                'count': len(FAKE_DATA_RECENT),
                'offset': 0
            },
            'meta': {'status': 200}
        }

    def fake_search_fetch_relevant(self):
        self.g._fetch = Mock()
        self.g._fetch.return_value = {
            'data': FAKE_DATA_RELEVANT,
            'pagination': {
                'total_count': 3,
                'count': len(FAKE_DATA_RELEVANT),
                'offset': 0
            },
            'meta': {'status': 200}
        }

    def fake_fetch(self, result=FAKE_DATA):
        self.g._fetch = Mock()
        self.g._fetch.return_value = {
            'data': result or None,
            'meta': {'status': 200}
        }

    def test_search_no_results(self):
        self.fake_search_fetch(0, pages=1)
        results = [x for x in self.g.search('foo')]
        assert len(results) == 0

    def test_search_respects_hard_limit(self):
        self.fake_search_fetch(25)
        results = [x for x in self.g.search('foo', limit=10)]
        assert len(results) == 10

    def test_search_handles_pages(self):
        self.fake_search_fetch(25)
        results = [x for x in self.g.search('foo', limit=50)]
        assert len(results) == 50

    def test_search_no_limit_returns_all(self):
        self.fake_search_fetch(25)
        results = [x for x in self.g.search('foo', limit=None)]
        assert len(results) == 75

    def test_search_list_returns_list(self):
        self.fake_search_fetch(25)
        results = self.g.search_list('foo', limit=10)
        assert isinstance(results, list)
        assert len(results) == 10

    def test_search_with_phrase_hyphenates(self):
        self.fake_search_fetch(0, pages=1)
        self.g.search(phrase='foo bar baz')
        assert self.g._fetch.called_with(q='foo-bar-baz')

    def test_search_with_recent_parameter(self):
        self.fake_search_fetch_recent()
        results = self.g._fetch(phrase='foo', sort_recent=True)
        assert results.get('data') == FAKE_DATA_RECENT

    def test_search_with_relevant_parameter(self):
        self.fake_search_fetch_relevant()
        results = self.g._fetch(phrase='foo', sort_recent=False)
        assert results.get('data') == FAKE_DATA_RELEVANT

    def test_translate_with_phrase_hyphenates(self):
        self.fake_fetch()
        self.g.translate(phrase='foo bar baz')
        assert self.g._fetch.called_with(s='foo-bar-baz')

    def test_translate(self):
        self.fake_fetch()
        assert isinstance(self.g.translate('foo'), GiphyImage)
        assert self.g._fetch.called_with('translate')

    def test_gif(self):
        self.fake_fetch()
        assert isinstance(self.g.gif('foo'), GiphyImage)
        assert self.g._fetch.called_with('foo')

    def test_screensaver(self):
        self.fake_fetch()
        assert isinstance(self.g.screensaver(), GiphyImage)

    def test_screensaver_passes_tag(self):
        self.fake_fetch()
        self.g.screensaver('foo')
        assert self.g._fetch.called_with(tag='foo')

    def test_random_gif(self):
        self.fake_fetch()
        assert isinstance(self.g.random_gif(), GiphyImage)

    def test_translate_returns_none(self):
        self.fake_fetch(result=None)
        assert self.g.translate('foo') is None

    def test_gif_returns_none(self):
        self.fake_fetch(result=None)
        assert self.g.gif('foo') is None

    def test_screensaver_returns_none(self):
        self.fake_fetch(result=None)
        assert self.g.screensaver('foo') is None

    def test_translate_raises_strict(self):
        self.fake_fetch(result=None)
        self.assertRaises(GiphyApiException, self.g.translate, 'foo', strict=True)

    def test_gif_returns_raises_strict(self):
        self.fake_fetch(result=None)
        self.assertRaises(GiphyApiException, self.g.gif, 'foo', strict=True)

    def test_screensaver_raises_strict(self):
        self.fake_fetch(result=None)
        self.assertRaises(GiphyApiException, self.g.screensaver, 'foo', strict=True)

    def test_strict_for_all(self):
        self.g = Giphy(strict=True)
        self.fake_fetch(result=None)

        self.assertRaises(GiphyApiException, self.g.translate, 'foo', strict=False)
        self.assertRaises(GiphyApiException, self.g.gif, 'foo', strict=False)
        self.assertRaises(GiphyApiException, self.g.screensaver, 'foo', strict=False)