From 12693abd2c2196ce9c2b32cc6cab1df6e5d751db Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com> Date: Wed, 31 May 2023 11:04:51 +0200 Subject: [PATCH] Change occurrences of % and format() to f-strings --- docs/release.rst | 6 ++ zarr/_storage/absstore.py | 2 +- zarr/_storage/store.py | 2 +- zarr/convenience.py | 20 +++---- zarr/core.py | 8 +-- zarr/hierarchy.py | 4 +- zarr/indexing.py | 2 +- zarr/storage.py | 2 +- zarr/tests/test_core.py | 6 +- zarr/tests/test_meta.py | 110 ++++++++++++++++++------------------- zarr/tests/test_storage.py | 2 +- zarr/util.py | 2 +- 12 files changed, 86 insertions(+), 80 deletions(-) diff --git a/docs/release.rst b/docs/release.rst index 2f64454c97..08cb514254 100644 --- a/docs/release.rst +++ b/docs/release.rst @@ -11,6 +11,12 @@ Release notes Unreleased ---------- + Maintenance + ~~~~~~~~~~~ + + * Change occurrences of % and format() to f-strings. + By :user:`Dimitri Papadopoulos Orfanos ` :issue:`1423`. + .. _release_2.15.0: 2.15.0 diff --git a/zarr/_storage/absstore.py b/zarr/_storage/absstore.py index cc41018f9e..091e39f2f0 100644 --- a/zarr/_storage/absstore.py +++ b/zarr/_storage/absstore.py @@ -77,7 +77,7 @@ def __init__(self, container=None, prefix='', account_name=None, account_key=Non from azure.storage.blob import ContainerClient blob_service_kwargs = blob_service_kwargs or {} client = ContainerClient( - "https://{}.blob.core.windows.net/".format(account_name), container, + f"https://{account_name}.blob.core.windows.net/", container, credential=account_key, **blob_service_kwargs ) diff --git a/zarr/_storage/store.py b/zarr/_storage/store.py index 0594dc22de..984f181b04 100644 --- a/zarr/_storage/store.py +++ b/zarr/_storage/store.py @@ -227,7 +227,7 @@ def _validate_key(self, key: str): # TODO: Possibly allow key == ".zmetadata" too if we write a # consolidated metadata spec corresponding to this? ): - raise ValueError("keys starts with unexpected value: `{}`".format(key)) + raise ValueError(f"keys starts with unexpected value: `{key}`") if key.endswith('/'): raise ValueError("keys may not end in /") diff --git a/zarr/convenience.py b/zarr/convenience.py index 9a0eae20a3..94281f87ff 100644 --- a/zarr/convenience.py +++ b/zarr/convenience.py @@ -248,7 +248,7 @@ def save_group(store: StoreLike, *args, zarr_version=None, path=None, **kwargs): try: grp = _create_group(_store, path=path, overwrite=True, zarr_version=zarr_version) for i, arr in enumerate(args): - k = 'arr_{}'.format(i) + k = f'arr_{i}' grp.create_dataset(k, data=arr, overwrite=True, zarr_version=zarr_version) for k, arr in kwargs.items(): grp.create_dataset(k, data=arr, overwrite=True, zarr_version=zarr_version) @@ -517,9 +517,9 @@ def _log_copy_summary(log, dry_run, n_copied, n_skipped, n_bytes_copied): message = 'dry run: ' else: message = 'all done: ' - message += '{:,} copied, {:,} skipped'.format(n_copied, n_skipped) + message += f'{n_copied:,} copied, {n_skipped:,} skipped' if not dry_run: - message += ', {:,} bytes copied'.format(n_bytes_copied) + message += f', {n_bytes_copied:,} bytes copied' log(message) @@ -710,14 +710,14 @@ def copy_store(source, dest, source_path='', dest_path='', excludes=None, # take action if do_copy: - log('copy {}'.format(descr)) + log(f'copy {descr}') if not dry_run: data = source[source_key] n_bytes_copied += buffer_size(data) dest[dest_key] = data n_copied += 1 else: - log('skip {}'.format(descr)) + log(f'skip {descr}') n_skipped += 1 # log a final message with a summary of what happened @@ -728,7 +728,7 @@ def copy_store(source, dest, source_path='', dest_path='', excludes=None, def _check_dest_is_group(dest): if not hasattr(dest, 'create_dataset'): - raise ValueError('dest must be a group, got {!r}'.format(dest)) + raise ValueError(f'dest must be a group, got {dest!r}') def copy(source, dest, name=None, shallow=False, without_attrs=False, log=None, @@ -915,7 +915,7 @@ def _copy(log, source, dest, name, root, shallow, without_attrs, if_exists, if do_copy: # log a message about what we're going to do - log('copy {} {} {}'.format(source.name, source.shape, source.dtype)) + log(f'copy {source.name} {source.shape} {source.dtype}') if not dry_run: @@ -986,7 +986,7 @@ def _copy(log, source, dest, name, root, shallow, without_attrs, if_exists, n_copied += 1 else: - log('skip {} {} {}'.format(source.name, source.shape, source.dtype)) + log(f'skip {source.name} {source.shape} {source.dtype}') n_skipped += 1 elif root or not shallow: @@ -1008,7 +1008,7 @@ def _copy(log, source, dest, name, root, shallow, without_attrs, if_exists, if do_copy: # log action - log('copy {}'.format(source.name)) + log(f'copy {source.name}') if not dry_run: @@ -1045,7 +1045,7 @@ def _copy(log, source, dest, name, root, shallow, without_attrs, if_exists, n_copied += 1 else: - log('skip {}'.format(source.name)) + log(f'skip {source.name}') n_skipped += 1 return n_copied, n_skipped, n_bytes_copied diff --git a/zarr/core.py b/zarr/core.py index 5537733b4b..d97a6da5d6 100644 --- a/zarr/core.py +++ b/zarr/core.py @@ -2256,7 +2256,7 @@ def _encode_chunk(self, chunk): def __repr__(self): t = type(self) - r = '<{}.{}'.format(t.__module__, t.__name__) + r = f'<{t.__module__}.{t.__name__}' if self.name: r += ' %r' % self.name r += ' %s' % str(self.shape) @@ -2297,11 +2297,11 @@ def info_items(self): def _info_items_nosync(self): def typestr(o): - return '{}.{}'.format(type(o).__module__, type(o).__name__) + return f'{type(o).__module__}.{type(o).__name__}' def bytestr(n): if n > 2**10: - return '{} ({})'.format(n, human_readable_size(n)) + return f'{n} ({human_readable_size(n)})' else: return str(n) @@ -2342,7 +2342,7 @@ def bytestr(n): ('Storage ratio', '%.1f' % (self.nbytes / self.nbytes_stored)), ] items += [ - ('Chunks initialized', '{}/{}'.format(self.nchunks_initialized, self.nchunks)) + ('Chunks initialized', f'{self.nchunks_initialized}/{self.nchunks}') ] return items diff --git a/zarr/hierarchy.py b/zarr/hierarchy.py index 18e7ac7863..5d939c61aa 100644 --- a/zarr/hierarchy.py +++ b/zarr/hierarchy.py @@ -316,7 +316,7 @@ def __len__(self): def __repr__(self): t = type(self) - r = '<{}.{}'.format(t.__module__, t.__name__) + r = f'<{t.__module__}.{t.__name__}' if self.name: r += ' %r' % self.name if self._read_only: @@ -335,7 +335,7 @@ def __exit__(self, exc_type, exc_val, exc_tb): def info_items(self): def typestr(o): - return '{}.{}'.format(type(o).__module__, type(o).__name__) + return f'{type(o).__module__}.{type(o).__name__}' items = [] diff --git a/zarr/indexing.py b/zarr/indexing.py index 3fb3e2f204..427874c5a5 100644 --- a/zarr/indexing.py +++ b/zarr/indexing.py @@ -880,7 +880,7 @@ def check_fields(fields, dtype): # multiple field selection out_dtype = np.dtype([(f, dtype[f]) for f in fields]) except KeyError as e: - raise IndexError("invalid 'fields' argument, field not found: {!r}".format(e)) + raise IndexError(f"invalid 'fields' argument, field not found: {e!r}") else: return out_dtype else: diff --git a/zarr/storage.py b/zarr/storage.py index e6c3f62faf..5dbb066aaa 100644 --- a/zarr/storage.py +++ b/zarr/storage.py @@ -2807,7 +2807,7 @@ def __init__(self, prefix='zarr', dimension_separator=None, **kwargs): self.client = redis.Redis(**kwargs) def _key(self, key): - return '{prefix}:{key}'.format(prefix=self._prefix, key=key) + return f'{self._prefix}:{key}' def __getitem__(self, key): return self.client[self._key(key)] diff --git a/zarr/tests/test_core.py b/zarr/tests/test_core.py index 1cac51ba0d..25c48350c1 100644 --- a/zarr/tests/test_core.py +++ b/zarr/tests/test_core.py @@ -1155,7 +1155,7 @@ def test_dtypes(self): # datetime, timedelta for base_type in 'Mm': for resolution in 'D', 'us', 'ns': - dtype = '{}8[{}]'.format(base_type, resolution) + dtype = f'{base_type}8[{resolution}]' z = self.create_array(shape=100, dtype=dtype, fill_value=0) assert z.dtype == np.dtype(dtype) a = np.random.randint(np.iinfo('i8').min, np.iinfo('i8').max, @@ -1348,7 +1348,7 @@ def compare_arrays(expected, actual, item_dtype): # convenience API for item_type in 'int', '