Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c3c0d24

Browse files
Refactor string formatting to use f-strings (#128)
Python f-string's are the preferred approach to formatting strings and is supported since Python 3.6. Replace remaining old-style string-formatting to use f-string style. Additionally, refactor certain error messages to be consistent with others.
1 parent f4b1ba1 commit c3c0d24

4 files changed

Lines changed: 26 additions & 28 deletions

File tree

nrrd/reader.py

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ def _parse_field_value(value, field_type):
143143
# for none rows. NaN is only valid for floating point numbers
144144
return parse_optional_matrix(value)
145145
else:
146-
raise NRRDError('Invalid field type given: %s' % field_type)
146+
raise NRRDError(f'Invalid field type given: {field_type}')
147147

148148

149149
def _determine_datatype(fields):
@@ -162,7 +162,7 @@ def _determine_datatype(fields):
162162
elif fields['endian'] == 'little':
163163
np_typestring = '<' + np_typestring
164164
else:
165-
raise NRRDError('Invalid endian value in header: "%s"' % fields['endian'])
165+
raise NRRDError(f'Invalid endian value in header: {fields["endian"]}')
166166

167167
return np.dtype(np_typestring)
168168

@@ -189,10 +189,10 @@ def _validate_magic_line(line):
189189
try:
190190
version = int(line[4:])
191191
if version > 5:
192-
raise NRRDError('Unsupported NRRD file version (version: %i). This library only supports v%i and below.'
193-
% (version, 5))
192+
raise NRRDError(f'Unsupported NRRD file version (version: {version}). This library only supports v5 '
193+
'and below.')
194194
except ValueError:
195-
raise NRRDError('Invalid NRRD magic line: %s' % line)
195+
raise NRRDError(f'Invalid NRRD magic line: {line}')
196196

197197
return len(line)
198198

@@ -279,12 +279,10 @@ def read_header(file, custom_field_map=None):
279279

280280
# Check if the field has been added already
281281
if field in header.keys():
282-
dup_message = "Duplicate header field: '%s'" % str(field)
283-
284282
if not ALLOW_DUPLICATE_FIELD:
285-
raise NRRDError(dup_message)
286-
287-
warnings.warn(dup_message)
283+
raise NRRDError(f'Duplicate header field: {field}')
284+
else:
285+
warnings.warn(f'Duplicate header field: {field}')
288286

289287
# Get the datatype of the field based on it's field name and custom field map
290288
field_type = _get_field_type(field, custom_field_map)
@@ -341,11 +339,11 @@ def read_data(header, fh=None, filename=None, index_order='F'):
341339
# Check that the required fields are in the header
342340
for field in _NRRD_REQUIRED_FIELDS:
343341
if field not in header:
344-
raise NRRDError('Header is missing required field: "%s".' % field)
342+
raise NRRDError(f'Header is missing required field: {field}')
345343

346344
if header['dimension'] != len(header['sizes']):
347-
raise NRRDError('Number of elements in sizes does not match dimension. Dimension: %i, len(sizes): %i' % (
348-
header['dimension'], len(header['sizes'])))
345+
raise NRRDError(f'Number of elements in sizes does not match dimension. Dimension: {header["dimension"]}, '
346+
f'len(sizes): {len(header["sizes"])}')
349347

350348
# Determine the data type from the header
351349
dtype = _determine_datatype(header)
@@ -424,7 +422,7 @@ def read_data(header, fh=None, filename=None, index_order='F'):
424422
# to close it for us
425423
fh.close()
426424

427-
raise NRRDError('Unsupported encoding: "%s"' % header['encoding'])
425+
raise NRRDError(f'Unsupported encoding: {header["encoding"]}')
428426

429427
# Loop through the file and read a chunk at a time (see _READ_CHUNKSIZE why it is read in chunks)
430428
decompressed_data = bytearray()

nrrd/tests/test_reading.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -178,15 +178,15 @@ def test_read_dup_field_error_and_warn(self):
178178
expected_header = {'type': 'float', 'dimension': 3}
179179
header_txt_tuple = ('NRRD0005', 'type: float', 'dimension: 3', 'type: float')
180180

181-
with self.assertRaisesRegex(nrrd.NRRDError, "Duplicate header field: 'type'"):
181+
with self.assertRaisesRegex(nrrd.NRRDError, "Duplicate header field: type"):
182182
header = nrrd.read_header(header_txt_tuple)
183183

184184
import warnings
185185
with warnings.catch_warnings(record=True) as w:
186186
nrrd.reader.ALLOW_DUPLICATE_FIELD = True
187187
header = nrrd.read_header(header_txt_tuple)
188188

189-
self.assertTrue("Duplicate header field: 'type'" in str(w[0].message))
189+
self.assertTrue("Duplicate header field: type" in str(w[0].message))
190190

191191
self.assertEqual(expected_header, header)
192192
nrrd.reader.ALLOW_DUPLICATE_FIELD = False
@@ -334,7 +334,7 @@ def test_missing_required_field(self):
334334
# Delete required field
335335
del header['type']
336336

337-
with self.assertRaisesRegex(nrrd.NRRDError, 'Header is missing required field: "type".'):
337+
with self.assertRaisesRegex(nrrd.NRRDError, 'Header is missing required field: type'):
338338
nrrd.read_data(header, fh, RAW_NRRD_FILE_PATH)
339339

340340
def test_wrong_sizes(self):
@@ -357,7 +357,7 @@ def test_invalid_encoding(self):
357357
# Set the encoding to be incorrect
358358
header['encoding'] = 'fake'
359359

360-
with self.assertRaisesRegex(nrrd.NRRDError, 'Unsupported encoding: "fake"'):
360+
with self.assertRaisesRegex(nrrd.NRRDError, 'Unsupported encoding: fake'):
361361
nrrd.read_data(header, fh, RAW_NRRD_FILE_PATH)
362362

363363
def test_detached_header_no_filename(self):
@@ -417,7 +417,7 @@ def test_invalid_endian(self):
417417
# Set endianness to fake value
418418
header['endian'] = 'fake'
419419

420-
with self.assertRaisesRegex(nrrd.NRRDError, 'Invalid endian value in header: "fake"'):
420+
with self.assertRaisesRegex(nrrd.NRRDError, 'Invalid endian value in header: fake'):
421421
nrrd.read_data(header, fh, RAW_NRRD_FILE_PATH)
422422

423423
def test_invalid_index_order(self):

nrrd/tests/test_writing.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ def test_unsupported_encoding(self):
303303
output_filename = os.path.join(self.temp_write_dir, 'testfile_unsupported_encoding.nrrd')
304304
header = {'encoding': 'fake'}
305305

306-
with self.assertRaisesRegex(nrrd.NRRDError, 'Unsupported encoding: "fake"'):
306+
with self.assertRaisesRegex(nrrd.NRRDError, 'Unsupported encoding: fake'):
307307
nrrd.write(output_filename, np.zeros((3, 9)), header, index_order=self.index_order)
308308

309309
def test_invalid_index_order(self):

nrrd/writer.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ def _format_field_value(value, field_type):
9393
elif field_type == 'double matrix':
9494
return format_optional_matrix(value)
9595
else:
96-
raise NRRDError('Invalid field type given: %s' % field_type)
96+
raise NRRDError(f'Invalid field type given: {field_type}')
9797

9898

9999
def _handle_header(data, header=None, index_order='F'):
@@ -220,7 +220,7 @@ def _write_data(data, fh, header, compression_level=None, index_order='F'):
220220
elif header['encoding'] in ['bzip2', 'bz2']:
221221
compressobj = bz2.BZ2Compressor(compression_level)
222222
else:
223-
raise NRRDError('Unsupported encoding: "%s"' % header['encoding'])
223+
raise NRRDError(f'Unsupported encoding: {header["encoding"]}')
224224

225225
# Write the data in chunks (see _WRITE_CHUNKSIZE declaration for more information why)
226226
# Obtain the length of the data since we will be using it repeatedly, more efficient
@@ -333,15 +333,15 @@ def write(file, data, header=None, detached_header=False, relative_data_path=Tru
333333
# Get the appropriate data filename based on encoding, see here for information on the standard detached
334334
# filename: http://teem.sourceforge.net/nrrd/format.html#encoding
335335
if header['encoding'] == 'raw':
336-
data_filename = '%s.raw' % base_filename
336+
data_filename = f'{base_filename}.raw'
337337
elif header['encoding'] in ['ASCII', 'ascii', 'text', 'txt']:
338-
data_filename = '%s.txt' % base_filename
338+
data_filename = f'{base_filename}.txt'
339339
elif header['encoding'] in ['gzip', 'gz']:
340-
data_filename = '%s.raw.gz' % base_filename
340+
data_filename = f'{base_filename}.raw.gz'
341341
elif header['encoding'] in ['bzip2', 'bz2']:
342-
data_filename = '%s.raw.bz2' % base_filename
342+
data_filename = f'{base_filename}.raw.bz2'
343343
else:
344-
raise NRRDError('Invalid encoding specification while writing NRRD file: %s' % header['encoding'])
344+
raise NRRDError(f'Invalid encoding specification while writing NRRD file: {header["encoding"]}')
345345

346346
# Update the data file field in the header with the path of the detached data
347347
# TODO This will cause problems when the user specifies a relative data path and gives a custom path OUTSIDE
@@ -351,7 +351,7 @@ def write(file, data, header=None, detached_header=False, relative_data_path=Tru
351351
detached_header = True
352352
elif file.endswith('.nrrd') and detached_header:
353353
data_filename = file
354-
file = '%s.nhdr' % os.path.splitext(file)[0]
354+
file = f'{os.path.splitext(file)[0]}.nhdr'
355355
header['data file'] = os.path.basename(data_filename) \
356356
if relative_data_path else os.path.abspath(data_filename)
357357
else:

0 commit comments

Comments
 (0)