| from __future__ import annotations | |
| import asyncio | |
| import unittest | |
| from g4f.client import AsyncClient, ImagesResponse | |
| from g4f.providers.retry_provider import IterListProvider | |
| from .mocks import ( | |
| YieldImageResponseProviderMock, | |
| MissingAuthProviderMock, | |
| AsyncRaiseExceptionProviderMock, | |
| YieldNoneProviderMock | |
| ) | |
| DEFAULT_MESSAGES = [{'role': 'user', 'content': 'Hello'}] | |
| class TestIterListProvider(unittest.IsolatedAsyncioTestCase): | |
| async def test_skip_provider(self): | |
| client = AsyncClient(image_provider=IterListProvider([MissingAuthProviderMock, YieldImageResponseProviderMock], False)) | |
| response = await client.images.generate("Hello", "", response_format="orginal") | |
| self.assertIsInstance(response, ImagesResponse) | |
| self.assertEqual("Hello", response.data[0].url) | |
| async def test_only_one_result(self): | |
| client = AsyncClient(image_provider=IterListProvider([YieldImageResponseProviderMock, YieldImageResponseProviderMock], False)) | |
| response = await client.images.generate("Hello", "", response_format="orginal") | |
| self.assertIsInstance(response, ImagesResponse) | |
| self.assertEqual("Hello", response.data[0].url) | |
| async def test_skip_none(self): | |
| client = AsyncClient(image_provider=IterListProvider([YieldNoneProviderMock, YieldImageResponseProviderMock], False)) | |
| response = await client.images.generate("Hello", "", response_format="orginal") | |
| self.assertIsInstance(response, ImagesResponse) | |
| self.assertEqual("Hello", response.data[0].url) | |
| def test_raise_exception(self): | |
| async def run_exception(): | |
| client = AsyncClient(image_provider=IterListProvider([YieldNoneProviderMock, AsyncRaiseExceptionProviderMock], False)) | |
| await client.images.generate("Hello", "") | |
| self.assertRaises(RuntimeError, asyncio.run, run_exception()) | |
| if __name__ == '__main__': | |
| unittest.main() |