From 7b9ad21de81cd5129b047d8de3ce8d9e5a53ea9a Mon Sep 17 00:00:00 2001 From: Heiner Lohaus Date: Sun, 1 Oct 2023 20:29:57 +0200 Subject: Change event loop policy on windows Support more versions from curl_cffi --- g4f/Provider/helper.py | 11 +++++++++-- g4f/requests.py | 31 +++++++++++++++++++++---------- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/g4f/Provider/helper.py b/g4f/Provider/helper.py index 2c00a488..544c5a76 100644 --- a/g4f/Provider/helper.py +++ b/g4f/Provider/helper.py @@ -1,13 +1,20 @@ from __future__ import annotations -import asyncio +import asyncio, sys from asyncio import AbstractEventLoop import browser_cookie3 +# Change event loop policy on windows +if sys.platform == 'win32': + if isinstance( + asyncio.get_event_loop_policy(), asyncio.WindowsProactorEventLoopPolicy + ): + asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) + +# Local Cookie Storage _cookies: dict[str, dict[str, str]] = {} - # If event loop is already running, handle nested event loops # If "nest_asyncio" is installed, patch the event loop. def get_event_loop() -> AbstractEventLoop: diff --git a/g4f/requests.py b/g4f/requests.py index 6f4b587c..367bafa0 100644 --- a/g4f/requests.py +++ b/g4f/requests.py @@ -8,10 +8,12 @@ from aiohttp.base_protocol import BaseProtocol from curl_cffi.requests import AsyncSession as BaseSession from curl_cffi.requests import Response -from curl_cffi import AsyncCurl -is_newer_0_5_9 = hasattr(AsyncCurl, "remove_handle") -is_newer_0_5_8 = hasattr(BaseSession, "_set_cookies") +import curl_cffi + +is_newer_0_5_8 = hasattr(BaseSession, "_set_cookies") or hasattr(curl_cffi.requests.Cookies, "get_cookies_for_curl") +is_newer_0_5_9 = hasattr(curl_cffi.AsyncCurl, "remove_handle") +is_newer_0_5_10 = hasattr(BaseSession, "release_curl") class StreamResponse: def __init__(self, inner: Response, content: StreamReader, request): @@ -65,13 +67,22 @@ class StreamRequest: async def __aenter__(self) -> StreamResponse: self.curl = await self.session.pop_curl() self.enter = self.loop.create_future() - request, _, header_buffer = self.session._set_curl_options( - self.curl, - self.method, - self.url, - content_callback=self.on_content, - **self.options - ) + if is_newer_0_5_10: + request, _, header_buffer, _, _ = self.session._set_curl_options( + self.curl, + self.method, + self.url, + content_callback=self.on_content, + **self.options + ) + else: + request, _, header_buffer = self.session._set_curl_options( + self.curl, + self.method, + self.url, + content_callback=self.on_content, + **self.options + ) if is_newer_0_5_9: self.handle = self.session.acurl.add_handle(self.curl) else: -- cgit v1.2.3