Skip to content

Commit f4993c6

Browse files
authored
Merge pull request jxmorris12#34 from samber/feat-remote-server
Remote LanguageTool server
2 parents 80b0dc0 + a5f850c commit f4993c6

4 files changed

Lines changed: 66 additions & 15 deletions

File tree

‎Dockerfile‎

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
##
2+
# NAME : iadvize/language-tools-server
3+
# VERSION : 3
4+
# DOCKER-VERSION : 1.13
5+
# DESCRIPTION : Python runtime v3
6+
# TO_BUILD : docker build --pull=true --no-cache --rm -t iadvize/language-tools-server:3.2 -t iadvize/language-tools-server:latest .
7+
# TO_SHIP : docker push iadvize/language-tools-server:3.2 && docker push iadvize/language-tools-server:latest
8+
# TO_RUN : docker run -ti --rm -p 8080:8080 iadvize/language-tools-server:3.2
9+
##
10+
11+
FROM java:8
12+
13+
MAINTAINER Samuel Berthe <samuel.berthe@iadvize.com>
14+
15+
ENV DEBIAN_FRONTEND="noninteractive" \
16+
INITRD="No" \
17+
PACKAGES="curl unzip" \
18+
LANGUAGE_TOOL_VERSION="3.2"
19+
20+
WORKDIR /app
21+
EXPOSE 8080
22+
CMD /usr/bin/java -cp /app/LanguageTool-${LANGUAGE_TOOL_VERSION}/languagetool-server.jar org.languagetool.server.HTTPServer --port 8080 --public
23+
24+
RUN apt-get update && \
25+
apt-get install -yq --no-install-recommends $PACKAGES && \
26+
apt-get clean && \
27+
rm -rf /var/lib/apt/lists/*
28+
29+
RUN mkdir -p /app && \
30+
curl -L -o /app/LanguageTool-${LANGUAGE_TOOL_VERSION}.zip https://www.languagetool.org/download/LanguageTool-${LANGUAGE_TOOL_VERSION}.zip && \
31+
unzip /app/LanguageTool-${LANGUAGE_TOOL_VERSION}.zip && \
32+
rm -rf /app/LanguageTool-${LANGUAGE_TOOL_VERSION}.zip

‎language_check/__init__.py‎

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ def __getattr__(self, name):
173173
class LanguageTool:
174174

175175
"""Main class used for checking text against different rules."""
176+
_REMOTE = False
176177
_HOST = socket.gethostbyname('localhost')
177178
_MIN_PORT = 8081
178179
_MAX_PORT = 8083
@@ -184,8 +185,13 @@ class LanguageTool:
184185
_instances = WeakValueDictionary()
185186
_PORT_RE = re.compile(r"(?:https?://.*:|port\s+)(\d+)", re.I)
186187

187-
def __init__(self, language=None, motherTongue=None):
188-
if not self._server_is_alive():
188+
def __init__(self, language=None, motherTongue=None, remote_server=None):
189+
if remote_server is not None:
190+
self._REMOTE = True
191+
self._HOST = remote_server["host"]
192+
self._port = remote_server["port"]
193+
self._url = 'http://{}:{}/v2/check'.format(self._HOST, self._port)
194+
elif not self._server_is_alive():
189195
self._start_server_on_free_port()
190196
if language is None:
191197
try:
@@ -290,7 +296,7 @@ def _get_languages(cls) -> set:
290296
@classmethod
291297
def _get_attrib(cls):
292298
"""Get matches element attributes."""
293-
if not cls._server_is_alive():
299+
if not cls._server_is_alive() and cls._REMOTE is False:
294300
cls._start_server_on_free_port()
295301
params = {'language': FAILSAFE_LANGUAGE, 'text': ''}
296302
data = urllib.parse.urlencode(params).encode()
@@ -304,8 +310,9 @@ def _get_root(cls, url, data=None, num_tries=2):
304310
with urlopen(url, data, cls._TIMEOUT) as f:
305311
return ElementTree.parse(f).getroot()
306312
except (IOError, http.client.HTTPException) as e:
307-
cls._terminate_server()
308-
cls._start_server()
313+
if cls._REMOTE is False:
314+
cls._terminate_server()
315+
cls._start_server()
309316
if n + 1 >= num_tries:
310317
raise Error('{}: {}'.format(cls._url, e))
311318

‎language_check/main.py‎

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ def parse_args():
4444
help='disable spell-checking rules')
4545
parser.add_argument('--ignore-lines',
4646
help='ignore lines that match this regular expression')
47+
parser.add_argument('--remote-host',
48+
help='hostname of the remote LanguageTool server')
49+
parser.add_argument('--remote-port',
50+
help='port of the remote LanguageTool server')
4751

4852
args = parser.parse_args()
4953

@@ -100,8 +104,13 @@ def main():
100104
else:
101105
encoding = args.encoding or 'utf-8'
102106

107+
remote_server = None
108+
if args.remote_host is not None and args.remote_port is not None:
109+
remote_server = {'host': args.remote_host, 'port': args.remote_port}
103110
lang_tool = LanguageTool(
104-
motherTongue=args.mother_tongue)
111+
motherTongue=args.mother_tongue,
112+
remote_server=remote_server,
113+
)
105114
guess_language = None
106115

107116
try:

‎test.bash‎

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,22 @@
44

55
trap "echo -e '\x1b[01;31mFailed\x1b[0m'" ERR
66

7-
echo 'This is okay.' | language-check -
8-
! echo 'This is noot okay.' | language-check -
7+
#export ARGS="--remote-host localhost --remote-port 8080"
8+
export ARGS=""
99

10-
echo 'This is okay.' | python -m language_check -
11-
! echo 'This is noot okay.' | python -m language_check -
10+
echo 'This is okay.' | language-check ${ARGS} -
11+
! echo 'This is noot okay.' | language-check ${ARGS} -
1212

13-
echo 'These are “smart” quotes.' | python -m language_check -
14-
! echo 'These are "dumb" quotes.' | python -m language_check -
15-
! echo 'These are "dumb" quotes.' | python -m language_check --enabled-only \
13+
echo 'This is okay.' | python -m language_check ${ARGS} -
14+
! echo 'This is noot okay.' | python -m language_check ${ARGS} -
15+
16+
echo 'These are “smart” quotes.' | python -m language_check ${ARGS} -
17+
! echo 'These are "dumb" quotes.' | python -m language_check ${ARGS} -
18+
! echo 'These are "dumb" quotes.' | python -m language_check ${ARGS} --enabled-only \
1619
--enable=EN_QUOTES -
17-
echo 'These are "dumb" quotes.' | python -m language_check --enabled-only \
20+
echo 'These are "dumb" quotes.' | python -m language_check ${ARGS} --enabled-only \
1821
--enable=EN_UNPAIRED_BRACKETS -
1922

20-
echo '# These are "dumb".' | python -m language_check --ignore-lines='^#' -
23+
echo '# These are "dumb".' | python -m language_check ${ARGS} --ignore-lines='^#' -
2124

2225
echo -e '\x1b[01;32mOkay\x1b[0m'

0 commit comments

Comments
 (0)