Add support for custom aiohttp connector (#325)

This should allow users that need it to add support for SOCKS5
in their application via https://pypi.org/project/aiohttp-socks/.

Partially fixes: https://github.com/rany2/edge-tts/issues/147

Signed-off-by: rany <rany2@riseup.net>
This commit is contained in:
Rany
2024-11-22 21:31:45 +02:00
committed by GitHub
parent 7ee40fff2c
commit d619925df2
3 changed files with 16 additions and 13 deletions

View File

@@ -238,7 +238,7 @@ def calc_max_mesg_size(tts_config: TTSConfig) -> int:
class Communicate:
"""
Class for communicating with the service.
Communicate with the service.
"""
def __init__(
@@ -249,17 +249,11 @@ class Communicate:
rate: str = "+0%",
volume: str = "+0%",
pitch: str = "+0Hz",
connector: Optional[aiohttp.BaseConnector] = None,
proxy: Optional[str] = None,
connect_timeout: int = 10,
receive_timeout: int = 60,
connect_timeout: Optional[int] = 10,
receive_timeout: Optional[int] = 60,
):
"""
Initializes the Communicate class.
Raises:
ValueError: If the voice is not valid.
"""
# Validate TTS settings and store the TTSConfig object.
self.tts_config = TTSConfig(voice, rate, volume, pitch)
@@ -290,6 +284,11 @@ class Communicate:
sock_read=receive_timeout,
)
# Validate the connector parameter.
if connector is not None and not isinstance(connector, aiohttp.BaseConnector):
raise TypeError("connector must be aiohttp.BaseConnector")
self.connector: Optional[aiohttp.BaseConnector] = connector
# Store current state of TTS.
self.state: Dict[str, Any] = {
"partial_text": None,
@@ -351,6 +350,7 @@ class Communicate:
# Create a new connection to the service.
ssl_ctx = ssl.create_default_context(cafile=certifi.where())
async with aiohttp.ClientSession(
connector=self.connector,
trust_env=True,
timeout=self.session_timeout,
) as session, session.ws_connect(