Skip to content

Commit 2ed91b2

Browse files
committed
perf: Change format() to f-strings, more modern and more efficient
1 parent 1ab1a30 commit 2ed91b2

File tree

6 files changed

+33
-60
lines changed

6 files changed

+33
-60
lines changed

language_tool_python/__main__.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def parse_args():
4242
help='If set, additional rules will be activated.')
4343
parser.add_argument(
4444
'--version', action='version',
45-
version='%(prog)s {}'.format(__version__),
45+
version=f'%(prog)s {__version__}',
4646
help='show version')
4747
parser.add_argument('-a', '--apply', action='store_true',
4848
help='automatically apply suggestions if available')
@@ -106,7 +106,7 @@ def main():
106106
if args.remote_host is not None:
107107
remote_server = args.remote_host
108108
if args.remote_port is not None:
109-
remote_server += ':{}'.format(args.remote_port)
109+
remote_server += f':{args.remote_port}'
110110
lang_tool = LanguageTool(
111111
language=args.language,
112112
motherTongue=args.mother_tongue,
@@ -116,7 +116,7 @@ def main():
116116
try:
117117
text = get_text(filename, encoding, ignore=args.ignore_lines)
118118
except UnicodeError as exception:
119-
print('{}: {}'.format(filename, exception), file=sys.stderr)
119+
print(f'{filename}: {exception}', file=sys.stderr)
120120
continue
121121

122122
if not args.spell_check:
@@ -137,7 +137,7 @@ def main():
137137
rule_id = match.ruleId
138138

139139
replacement_text = ', '.join(
140-
"'{}'".format(word)
140+
f"'{word}'"
141141
for word in match.replacements).strip()
142142

143143
message = match.message
@@ -147,14 +147,11 @@ def main():
147147
if replacement_text and not message.endswith(('.', '?')):
148148
message += '; suggestions: ' + replacement_text
149149

150-
print('{}: {}: {}'.format(
151-
filename,
152-
rule_id,
153-
message))
150+
print(f'{filename}: {rule_id}: {message}')
154151

155152
status = 2
156153
except LanguageToolError as exception:
157-
print('{}: {}'.format(filename, exception), file=sys.stderr)
154+
print(f'{filename}: {exception}', file=sys.stderr)
158155
continue
159156

160157
return status

language_tool_python/download_lt.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,7 @@ def parse_java_version(version_text):
6464
or re.search(JAVA_VERSION_REGEX_UPDATED, version_text)
6565
)
6666
if not match:
67-
raise SystemExit(
68-
'Could not parse Java version from """{}""".'.format(version_text))
67+
raise SystemExit(f'Could not parse Java version from """{version_text}""".')
6968
major1 = int(match.group('major1'))
7069
major2 = int(match.group('major2')) if match.group('major2') else 0
7170
return (major1, major2)
@@ -95,7 +94,7 @@ def confirm_java_compatibility():
9594
elif major_version >= 8:
9695
return True
9796
else:
98-
raise SystemError('Detected java {}.{}. LanguageTool requires Java >= 8.'.format(major_version, minor_version))
97+
raise SystemError(f'Detected java {major_version}.{minor_version}. LanguageTool requires Java >= 8.')
9998

10099

101100
def get_common_prefix(z):
@@ -113,7 +112,7 @@ def http_get(url, out_file, proxies=None):
113112
content_length = req.headers.get('Content-Length')
114113
total = int(content_length) if content_length is not None else None
115114
if req.status_code == 403: # Not found on AWS
116-
raise Exception('Could not find at URL {}.'.format(url))
115+
raise Exception(f'Could not find at URL {url}.')
117116
version = re.search(r'(\d+\.\d+)', url).group(1)
118117
progress = tqdm.tqdm(unit="B", unit_scale=True, total=total,
119118
desc=f'Downloading LanguageTool {version}')
@@ -126,9 +125,7 @@ def http_get(url, out_file, proxies=None):
126125

127126
def unzip_file(temp_file, directory_to_extract_to):
128127
""" Unzips a .zip file to folder path. """
129-
logger.info(
130-
'Unzipping {} to {}.'.format(temp_file.name, directory_to_extract_to)
131-
)
128+
logger.info(f'Unzipping {temp_file.name} to {directory_to_extract_to}.')
132129
with zipfile.ZipFile(temp_file.name, 'r') as zip_ref:
133130
zip_ref.extractall(directory_to_extract_to)
134131

@@ -145,7 +142,7 @@ def download_zip(url, directory):
145142
# Remove the temporary file.
146143
os.remove(downloaded_file.name)
147144
# Tell the user the download path.
148-
logger.info('Downloaded {} to {}.'.format(url, directory))
145+
logger.info(f'Downloaded {url} to {directory}.')
149146

150147

151148
def download_lt(language_tool_version: Optional[str] = LTP_DOWNLOAD_VERSION):

language_tool_python/language_tag.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def __str__(self):
2222
return self.normalized_tag
2323

2424
def __repr__(self):
25-
return '<LanguageTag "{}">'.format(str(self))
25+
return f'<LanguageTag "{str(self)}">'
2626

2727
def _normalize(self, tag):
2828
if not tag:
@@ -35,4 +35,4 @@ def _normalize(self, tag):
3535
try:
3636
return languages[self._LANGUAGE_RE.match(tag).group(1).lower()]
3737
except (KeyError, AttributeError):
38-
raise ValueError('unsupported language: {!r}'.format(tag))
38+
raise ValueError(f'unsupported language: {tag!r}')

language_tool_python/match.py

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -69,26 +69,18 @@ def _ordered_dict_repr():
6969
slots += list(set(self.__dict__).difference(slots))
7070
attrs = [slot for slot in slots
7171
if slot in self.__dict__ and not slot.startswith('_')]
72-
return '{{{}}}'.format(
73-
', '.join([
74-
'{!r}: {!r}'.format(attr, getattr(self, attr))
75-
for attr in attrs
76-
])
77-
)
72+
return f"{{{', '.join([f'{attr!r}: {getattr(self, attr)!r}' for attr in attrs])}}}"
7873

79-
return '{}({})'.format(self.__class__.__name__, _ordered_dict_repr())
74+
return f'{self.__class__.__name__}({_ordered_dict_repr()})'
8075

8176
def __str__(self):
8277
ruleId = self.ruleId
83-
s = 'Offset {}, length {}, Rule ID: {}'.format(
84-
self.offset, self.errorLength, ruleId)
78+
s = f'Offset {self.offset}, length {self.errorLength}, Rule ID: {ruleId}'
8579
if self.message:
86-
s += '\nMessage: {}'.format(self.message)
80+
s += f'\nMessage: {self.message}'
8781
if self.replacements:
88-
s += '\nSuggestion: {}'.format('; '.join(self.replacements))
89-
s += '\n{}\n{}'.format(
90-
self.context, ' ' * self.offsetInContext + '^' * self.errorLength
91-
)
82+
s += f"\nSuggestion: {'; '.join(self.replacements)}"
83+
s += f"\n{self.context}\n{' ' * self.offsetInContext + '^' * self.errorLength}"
9284
return s
9385

9486
@property
@@ -103,7 +95,7 @@ def select_replacement(self, index: int) -> None:
10395
if not self.replacements:
10496
raise ValueError('This Match has no suggestions')
10597
elif index < 0 or index >= len(self.replacements):
106-
raise ValueError('This Match\'s suggestions are numbered from 0 to {}'.format(len(self.replacements) - 1))
98+
raise ValueError(f'This Match\'s suggestions are numbered from 0 to {len(self.replacements) - 1}')
10799
self.replacements = [self.replacements[index]]
108100

109101
def __eq__(self, other):
@@ -124,5 +116,4 @@ def __setattr__(self, key, value):
124116

125117
def __getattr__(self, name):
126118
if name not in get_match_ordered_dict():
127-
raise AttributeError('{!r} object has no attribute {!r}'
128-
.format(self.__class__.__name__, name))
119+
raise AttributeError(f'{self.__class__.__name__!r} object has no attribute {name!r}')

language_tool_python/server.py

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,7 @@ def __del__(self):
9999
self.close()
100100

101101
def __repr__(self):
102-
return '{}(language={!r}, motherTongue={!r})'.format(
103-
self.__class__.__name__, self.language, self.motherTongue)
102+
return f'{self.__class__.__name__}(language={self.language!r}, motherTongue={self.motherTongue!r})'
104103

105104
def close(self):
106105
if self._server_is_alive():
@@ -188,10 +187,9 @@ def _get_valid_spelling_file_path() -> str:
188187
)
189188
if not os.path.exists(spelling_file_path):
190189
raise FileNotFoundError(
191-
"Failed to find the spellings file at {}\n "
190+
f"Failed to find the spellings file at {spelling_file_path}\n "
192191
"Please file an issue at "
193-
"https://github.com/jxmorris12/language_tool_python/issues"
194-
.format(spelling_file_path))
192+
"https://github.com/jxmorris12/language_tool_python/issues")
195193
return spelling_file_path
196194

197195
def _register_spellings(self):
@@ -205,7 +203,7 @@ def _register_spellings(self):
205203
spellings_file.write("\n")
206204
spellings_file.write("\n".join(new_spellings))
207205
if DEBUG_MODE:
208-
print("Registered new spellings at {}".format(spelling_file_path))
206+
print(f"Registered new spellings at {spelling_file_path}")
209207

210208
def _unregister_spellings(self):
211209
spelling_file_path = self._get_valid_spelling_file_path()
@@ -258,9 +256,8 @@ def _query_server(self, url, params=None, num_tries=2):
258256
except json.decoder.JSONDecodeError as e:
259257
if DEBUG_MODE:
260258
print(
261-
'URL {} and params {} '
262-
'returned invalid JSON response: {}'
263-
.format(url, params, e)
259+
f'URL {url} and params {params} '
260+
f'returned invalid JSON response: {e}'
264261
)
265262
print(response)
266263
print(response.content)
@@ -270,11 +267,11 @@ def _query_server(self, url, params=None, num_tries=2):
270267
self._terminate_server()
271268
self._start_local_server()
272269
if n + 1 >= num_tries:
273-
raise LanguageToolError('{}: {}'.format(self._url, e))
270+
raise LanguageToolError(f'{self._url}: {e}')
274271

275272
def _start_server_on_free_port(self):
276273
while True:
277-
self._url = 'http://{}:{}/v2/'.format(self._host, self._port)
274+
self._url = f'http://{self._host}:{self._port}/v2/'
278275
try:
279276
self._start_local_server()
280277
break
@@ -327,10 +324,7 @@ def _start_local_server(self):
327324
if match:
328325
port = int(match.group(1))
329326
if port != self._port:
330-
raise LanguageToolError(
331-
'requested port {}, but got {}'
332-
.format(self._port, port)
333-
)
327+
raise LanguageToolError(f'requested port {self._port}, but got {port}')
334328
break
335329
if not match:
336330
err_msg = self._terminate_server()

language_tool_python/utils.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -116,18 +116,13 @@ def get_language_tool_directory() -> str:
116116
"""Get LanguageTool directory."""
117117
download_folder = get_language_tool_download_path()
118118
if not os.path.isdir(download_folder):
119-
raise NotADirectoryError(
120-
"LanguageTool directory path is not a valid directory {}."
121-
.format(download_folder)
122-
)
119+
raise NotADirectoryError(f"LanguageTool directory path is not a valid directory {download_folder}.")
123120
language_tool_path_list = find_existing_language_tool_downloads(
124121
download_folder
125122
)
126123

127124
if not len(language_tool_path_list):
128-
raise FileNotFoundError(
129-
'LanguageTool not found in {}.'.format(download_folder)
130-
)
125+
raise FileNotFoundError(f'LanguageTool not found in {download_folder}.')
131126

132127
# Return the latest version found in the directory.
133128
return max(language_tool_path_list)
@@ -170,8 +165,7 @@ def get_jar_info() -> Tuple[str, str]:
170165
if jar_path:
171166
break
172167
else:
173-
raise PathError("can't find languagetool-standalone in {!r}"
174-
.format(jar_dir_name))
168+
raise PathError(f"can't find languagetool-standalone in {jar_dir_name!r}")
175169
return java_path, jar_path
176170

177171

0 commit comments

Comments
 (0)