@@ -79,6 +79,8 @@ class LanguageTool:
7979 :type config: Optional[str]
8080 :param language_tool_download_version: The version of LanguageTool to download if needed.
8181 :type language_tool_download_version: Optional[str]
82+ :param proxies: A dictionary of proxies to use for server requests (e.g., {'http': 'http://proxy:port', 'https': 'https://proxy:port'}).
83+ :type proxies: Optional[Dict[str, str]]
8284 """
8385
8486 _available_ports : List [int ]
@@ -141,6 +143,9 @@ class LanguageTool:
141143 _language : LanguageTag
142144 """The language to use (used in requests to the server and in other methods)."""
143145
146+ _proxies : Optional [Dict [str , str ]]
147+ """A dictionary of proxies to use for server requests."""
148+
144149 def __init__ (
145150 self ,
146151 language : Optional [str ] = None ,
@@ -151,6 +156,7 @@ def __init__(
151156 host : Optional [str ] = None ,
152157 config : Optional [Dict [str , Any ]] = None ,
153158 language_tool_download_version : str = LTP_DOWNLOAD_VERSION ,
159+ proxies : Optional [Dict [str , str ]] = None ,
154160 ) -> None :
155161 """
156162 Initialize the LanguageTool server.
@@ -163,10 +169,19 @@ def __init__(
163169 self ._available_ports = random .sample (range (8081 , 8999 ), (8999 - 8081 ))
164170 self ._port = self ._available_ports .pop ()
165171 self ._server = None
172+ self ._proxies = proxies
166173
167174 if remote_server and config is not None :
168175 err = "Cannot use both remote_server and config parameters."
169176 raise ValueError (err )
177+
178+ if proxies is not None and remote_server is None :
179+ err = (
180+ "Proxies can only be used with a remote server. "
181+ "Local LanguageTool servers do not require proxy configuration."
182+ )
183+ raise ValueError (err )
184+
170185 self .config = LanguageToolConfig (config ) if config else None
171186
172187 if remote_server is not None :
@@ -329,6 +344,33 @@ def _spell_checking_categories(self) -> Set[str]:
329344
330345 return {"TYPOS" }
331346
347+ @property
348+ def proxies (self ) -> Optional [Dict [str , str ]]:
349+ """
350+ Get the proxies used for requests to the server.
351+
352+ :return: A dictionary of proxies if set, otherwise None.
353+ :rtype: Optional[Dict[str, str]]
354+ """
355+ return self ._proxies
356+
357+ @proxies .setter
358+ def proxies (self , proxies : Optional [Dict [str , str ]]) -> None :
359+ """
360+ Set the proxies to be used for requests to the server.
361+
362+ :param proxies: A dictionary of proxies to set, or None to unset.
363+ :type proxies: Optional[Dict[str, str]]
364+ :raises ValueError: If trying to set proxies on a local server.
365+ """
366+ if proxies is not None and not self ._remote :
367+ err = (
368+ "Proxies can only be used with a remote server. "
369+ "Local LanguageTool servers do not require proxy configuration."
370+ )
371+ raise ValueError (err )
372+ self ._proxies = proxies
373+
332374 def check (self , text : str ) -> List [Match ]:
333375 """
334376 Checks the given text for language issues using the LanguageTool server.
@@ -561,6 +603,7 @@ def _query_server(
561603 url ,
562604 params = params ,
563605 timeout = self ._TIMEOUT ,
606+ proxies = self .proxies ,
564607 ) as response :
565608 try :
566609 return response .json ()
0 commit comments