Skip to content

Commit fc22ddf

Browse files
committed
revert cls change
1 parent 7001c2d commit fc22ddf

1 file changed

Lines changed: 66 additions & 60 deletions

File tree

‎language_tool_python/server.py‎

Lines changed: 66 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ class LanguageTool:
3131
_PORT_RE = re.compile(r"(?:https?://.*:|port\s+)(\d+)", re.I)
3232

3333
def __init__(self, language=None, motherTongue=None, remote_server=None):
34-
print('__init__', remote_server)
3534
if remote_server is not None:
3635
self._remote = True
3736
if remote_server[-1] == '/': remote_server = remote_server[:-1]
@@ -135,38 +134,42 @@ def disable_spellchecking(self):
135134
"""Disable spell-checking rules."""
136135
self.disabled_rules.update(self._spell_checking_rules)
137136

138-
def _get_languages(self) -> set:
137+
@classmethod
138+
def _get_languages(cls) -> set:
139139
"""Get supported languages (by querying the server)."""
140-
import pdb; pdb.set_trace()
141-
self._start_server_if_needed()
142-
url = urllib.parse.urljoin(self._url, 'languages')
140+
cls._start_server_if_needed()
141+
url = urllib.parse.urljoin(cls._url, 'languages')
143142
languages = set()
144-
for e in self._get_root(url, num_tries=1):
143+
for e in cls._get_root(url, num_tries=1):
145144
languages.add(e.get('code'))
146145
languages.add(e.get('longCode'))
147146
return languages
148147

149-
def _get_attrib(self):
148+
@classmethod
149+
def _get_attrib(cls):
150150
"""Get matches element attributes."""
151-
self._start_server_if_needed()
151+
cls._start_server_if_needed()
152152
params = {'language': FAILSAFE_LANGUAGE, 'text': ''}
153153
data = urllib.parse.urlencode(params).encode()
154-
root = self._get_root(self._url, data, num_tries=1)
154+
root = cls._get_root(cls._url, data, num_tries=1)
155155
return root.attrib
156156

157-
def _start_server_if_needed(self):
157+
@classmethod
158+
def _start_server_if_needed(cls):
158159
# Start server.
159-
if not self._server_is_alive() and self._remote is False:
160-
self._start_server_on_free_port()
160+
if not cls._server_is_alive() and cls._remote is False:
161+
cls._start_server_on_free_port()
161162

162-
def _update_remote_server_config(self, url):
163-
self._url = url
164-
self._remote = True
163+
@classmethod
164+
def _update_remote_server_config(cls, url):
165+
cls._url = url
166+
cls._remote = True
165167

166-
def _get_root(self, url, data=None, num_tries=2):
168+
@classmethod
169+
def _get_root(cls, url, data=None, num_tries=2):
167170
for n in range(num_tries):
168171
try:
169-
with urlopen(url, data, self._TIMEOUT) as f:
172+
with urlopen(url, data, cls._TIMEOUT) as f:
170173
raw_data = f.read().decode('utf-8')
171174
try:
172175
return json.loads(raw_data)
@@ -175,38 +178,39 @@ def _get_root(self, url, data=None, num_tries=2):
175178
print(raw_data)
176179
raise e
177180
except (IOError, http.client.HTTPException) as e:
178-
if self._remote is False:
179-
self._terminate_server()
180-
self._start_local_server()
181+
if cls._remote is False:
182+
cls._terminate_server()
183+
cls._start_local_server()
181184
if n + 1 >= num_tries:
182-
raise LanguageToolError('{}: {}'.format(self._url, e))
185+
raise LanguageToolError('{}: {}'.format(cls._url, e))
183186

184-
def _start_server_on_free_port(self):
187+
@classmethod
188+
def _start_server_on_free_port(cls):
185189
while True:
186-
self._url = 'http://{}:{}/v2/'.format(self._HOST, self._port)
190+
cls._url = 'http://{}:{}/v2/'.format(cls._HOST, cls._port)
187191
try:
188-
self._start_local_server()
192+
cls._start_local_server()
189193
break
190194
except ServerError:
191-
if self._MIN_PORT <= self._port < self._MAX_PORT:
192-
self._port += 1
195+
if cls._MIN_PORT <= cls._port < cls._MAX_PORT:
196+
cls._port += 1
193197
else:
194198
raise
195199

196-
197-
def _start_local_server(self):
200+
@classmethod
201+
def _start_local_server(cls):
198202
# Before starting local server, download language tool if needed.
199203
download_lt()
200204

201205
err = None
202206
try:
203-
server_cmd = get_server_cmd(self._port)
207+
server_cmd = get_server_cmd(cls._port)
204208
except PathError as e:
205209
# Can't find path to LanguageTool.
206210
err = e
207211
else:
208212
# Need to PIPE all handles: http://bugs.python.org/issue3905
209-
self._server = subprocess.Popen(
213+
cls._server = subprocess.Popen(
210214
server_cmd,
211215
stdin=subprocess.PIPE,
212216
stdout=subprocess.PIPE,
@@ -215,84 +219,86 @@ def _start_local_server(self):
215219
startupinfo=startupinfo
216220
)
217221
# Python 2.7 compatibility
218-
# for line in self._server.stdout:
222+
# for line in cls._server.stdout:
219223
match = None
220224
while True:
221-
line = self._server.stdout.readline()
225+
line = cls._server.stdout.readline()
222226
if not line:
223227
break
224-
match = self._PORT_RE.search(line)
228+
match = cls._PORT_RE.search(line)
225229
if match:
226230
port = int(match.group(1))
227-
if port != self._port:
231+
if port != cls._port:
228232
raise LanguageToolError('requested port {}, but got {}'.format(
229-
self._port, port))
233+
cls._port, port))
230234
break
231235
if not match:
232-
err_msg = self._terminate_server()
233-
match = self._PORT_RE.search(err_msg)
236+
err_msg = cls._terminate_server()
237+
match = cls._PORT_RE.search(err_msg)
234238
if not match:
235239
raise LanguageToolError(err_msg)
236240
port = int(match.group(1))
237-
if port != self._port:
241+
if port != cls._port:
238242
raise LanguageToolError(err_msg)
239243

240-
if self._server:
241-
self._consumer_thread = threading.Thread(
242-
target=lambda: _consume(self._server.stdout))
243-
self._consumer_thread.daemon = True
244-
self._consumer_thread.start()
244+
if cls._server:
245+
cls._consumer_thread = threading.Thread(
246+
target=lambda: _consume(cls._server.stdout))
247+
cls._consumer_thread.daemon = True
248+
cls._consumer_thread.start()
245249
else:
246250
# Couldn't start the server, so maybe there is already one running.
247251
params = {'language': FAILSAFE_LANGUAGE, 'text': ''}
248252
data = urllib.parse.urlencode(params).encode()
249253
try:
250-
with urlopen(self._url, data, self._TIMEOUT) as f:
254+
with urlopen(cls._url, data, cls._TIMEOUT) as f:
251255
tree = ElementTree.parse(f)
252256
except (IOError, http.client.HTTPException) as e:
253257
if err:
254258
raise err
255-
raise ServerError('{}: {}'.format(self._url, e))
259+
raise ServerError('{}: {}'.format(cls._url, e))
256260
root = tree.getroot()
257261

258262
# LanguageTool 1.9+
259263
if root.get('software') != 'LanguageTool':
260264
raise ServerError('unexpected software from {}: {!r}'
261-
.format(self._url, root.get('software')))
265+
.format(cls._url, root.get('software')))
262266
raise ServerError('Server running; don\'t start a server here.')
263267

264-
def _server_is_alive(self):
265-
return self._server and self._server.poll() is None
268+
@classmethod
269+
def _server_is_alive(cls):
270+
return cls._server and cls._server.poll() is None
266271

267-
def _terminate_server(self):
272+
@classmethod
273+
def _terminate_server(cls):
268274
LanguageToolError_message = ''
269275

270276
try:
271-
self._server.terminate()
277+
cls._server.terminate()
272278
except OSError:
273279
pass
274280

275281
try:
276-
LanguageToolError_message = self._server.communicate()[1].strip()
282+
LanguageToolError_message = cls._server.communicate()[1].strip()
277283
except (IOError, ValueError):
278284
pass
279285

280286
try:
281-
self._server.stdout.close()
287+
cls._server.stdout.close()
282288
except IOError:
283289
pass
284290

285291
try:
286-
self._server.stdin.close()
292+
cls._server.stdin.close()
287293
except IOError:
288294
pass
289295

290296
try:
291-
self._server.stderr.close()
297+
cls._server.stderr.close()
292298
except IOError:
293299
pass
294300

295-
self._server = None
301+
cls._server = None
296302

297303
return LanguageToolError_message
298304

@@ -302,11 +308,11 @@ class LanguageToolPublicAPI(LanguageTool):
302308
def __init__(self, *args, **kwargs):
303309
super().__init__(*args, remote_server='https://api.languagetool.org', **kwargs)
304310

305-
# @atexit.register
306-
# def terminate_server():
307-
# """Terminate the server."""
308-
# if LanguageTool._server_is_alive():
309-
# LanguageTool._terminate_server()
311+
@atexit.register
312+
def terminate_server():
313+
"""Terminate the server."""
314+
if LanguageTool._server_is_alive():
315+
LanguageTool._terminate_server()
310316

311317

312318

0 commit comments

Comments
 (0)