Skip to content

Commit c165fae

Browse files
authored
Merge pull request #141 from mdevolde/proxies
feat: added possibility to use proxies in LanguageTool requests, updated uv.lock
2 parents a1be9b5 + f2a1f13 commit c165fae

File tree

2 files changed

+43
-72
lines changed

2 files changed

+43
-72
lines changed

language_tool_python/server.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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()

uv.lock

Lines changed: 0 additions & 72 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)