From b0fe7e9c222f276de274865701a6f961534e1869 Mon Sep 17 00:00:00 2001 From: Christoph Fink Date: Tue, 15 Apr 2025 15:17:35 +0200 Subject: [PATCH 1/2] f-strings instead of old-style str.format() --- .../basicflickrhistorydownloader.py | 17 +++------- src/flickrhistory/cache.py | 8 ++--- src/flickrhistory/cacheupdaterthread.py | 2 +- src/flickrhistory/config.py | 8 ++--- src/flickrhistory/databaseobjects.py | 6 ++-- .../fancyflickrhistorydownloader.py | 34 +++++++++---------- src/flickrhistory/photodownloader.py | 6 ++-- src/flickrhistory/timespan.py | 6 ++-- 8 files changed, 37 insertions(+), 50 deletions(-) diff --git a/src/flickrhistory/basicflickrhistorydownloader.py b/src/flickrhistory/basicflickrhistorydownloader.py index 9e5968b..6b5f33b 100644 --- a/src/flickrhistory/basicflickrhistorydownloader.py +++ b/src/flickrhistory/basicflickrhistorydownloader.py @@ -99,15 +99,10 @@ def report_progress(self): photo_count, _, profile_count, _ = self._statistics print( ( - "Downloaded metadata for {photos: 6d} photos " - + "and {profiles: 4d} user profiles " - + "using {workers:d} workers, " - + "{todo:d} time slots to cover" - ).format( - photos=photo_count, - profiles=profile_count, - workers=(threading.active_count() - self.NUM_MANAGERS), - todo=len(self._todo_deque), + f"Downloaded metadata for {photo_count: 6d} photos " + f"and {profile_count: 4d} user profiles " + f"using {(threading.active_count() - self.NUM_MANAGERS)} workers, " + f"{len(self._todo_deque)} time slots to cover" ), file=sys.stderr, end=self.STATUS_UPDATE_LINE_END, @@ -131,9 +126,7 @@ def summarise_overall_progress(self): """ photo_count, _, profile_count, _ = self._statistics print( - ("Downloaded {photos:d} photos " + "and {profiles:d} user profiles").format( - photos=photo_count, profiles=profile_count - ), + f"Downloaded {photo_count} photos and {profile_count} user profiles", file=sys.stderr, ) diff --git a/src/flickrhistory/cache.py b/src/flickrhistory/cache.py index 212a5e7..dd8fdff 100644 --- a/src/flickrhistory/cache.py +++ b/src/flickrhistory/cache.py @@ -46,7 +46,7 @@ def __init__(self, cache=None, cache_file_basename=None): or os.environ.get("XDG_CACHE_HOME") or os.path.join(os.environ["HOME"], ".cache") ), - "{:s}.yml".format(cache_file_basename), + f"{cache_file_basename}.yml", ) ) @@ -63,9 +63,7 @@ def _load_cache(self): pass if cache == {}: - warnings.warn( - "No cache found in file {}, starting empty".format(self._cache_file) - ) + warnings.warn(f"No cache found in file {self._cache_file}, starting empty") return cache @@ -77,7 +75,7 @@ def _save_cache(self): Dumper=YamlNoAliasDumper, ) except PermissionError: - warnings.warn("Could not write cache to {}".format(self._cache_file)) + warnings.warn(f"Could not write cache to {self._cache_file}") def __getitem__(self, pos): """Retrieve a cache entry.""" diff --git a/src/flickrhistory/cacheupdaterthread.py b/src/flickrhistory/cacheupdaterthread.py index 650af39..0daf7ab 100644 --- a/src/flickrhistory/cacheupdaterthread.py +++ b/src/flickrhistory/cacheupdaterthread.py @@ -36,7 +36,7 @@ def run(self): newly_downloaded = self._done_queue.get(timeout=0.1) with Cache() as cache: cache["already downloaded"] += newly_downloaded - self.status = "added {}".format(newly_downloaded) + self.status = f"added {newly_downloaded}" except queue.Empty: if self.shutdown.is_set(): break diff --git a/src/flickrhistory/config.py b/src/flickrhistory/config.py index 57ad9dd..ca68888 100644 --- a/src/flickrhistory/config.py +++ b/src/flickrhistory/config.py @@ -61,7 +61,7 @@ def _load_config(self, config_files, config_files_basename): config_files_basename = self.__module__.split(".")[0] config_files = [ - "/etc/{:s}.yml".format(config_files_basename), + f"/etc/{config_files_basename}.yml", os.path.abspath( os.path.join( ( @@ -69,7 +69,7 @@ def _load_config(self, config_files, config_files_basename): or os.environ.get("XDG_CONFIG_HOME") or os.path.join(os.environ["HOME"], ".config") ), - "{:s}.yml".format(config_files_basename), + f"{config_files_basename}.yml", ) ), ] @@ -81,9 +81,7 @@ def _load_config(self, config_files, config_files_basename): pass if config == {}: - warnings.warn( - "No configuration found in files {}.".format(",".join(config_files)) - ) + warnings.warn(f"No configuration found in files {', '.join(config_files)}.") return config diff --git a/src/flickrhistory/databaseobjects.py b/src/flickrhistory/databaseobjects.py index 888478b..eb534c7 100644 --- a/src/flickrhistory/databaseobjects.py +++ b/src/flickrhistory/databaseobjects.py @@ -112,7 +112,7 @@ def from_raw_api_data_flickrprofilegetprofile(cls, data): def __str__(self): """Return a str representation.""" - return "".format(self.id, self.farm) + return f"" def __repr(self): """Return a str representation.""" @@ -230,9 +230,7 @@ def from_raw_api_data_flickrphotossearch(cls, data): longitude = float(data["longitude"]) latitude = float(data["latitude"]) assert longitude != 0 and latitude != 0 - photo_data["geom"] = "SRID=4326;POINT({longitude:f} {latitude:f})".format( - longitude=longitude, latitude=latitude - ) + photo_data["geom"] = f"SRID=4326;POINT({longitude:f} {latitude:f})" except ( AssertionError, # lon/lat is at exactly 0°N/S, 0°W/E -> bogus KeyError, # not contained in API dict diff --git a/src/flickrhistory/fancyflickrhistorydownloader.py b/src/flickrhistory/fancyflickrhistorydownloader.py index e364aa3..28cc4c0 100644 --- a/src/flickrhistory/fancyflickrhistorydownloader.py +++ b/src/flickrhistory/fancyflickrhistorydownloader.py @@ -29,23 +29,23 @@ class FancyFlickrHistoryDownloader(BasicFlickrHistoryDownloader): WELCOME = ( "{t.bold}{t.blue} ### flickrhistory " - + "{t.normal}{t.blue}" - + version - + "{t.bold} ###" - + "{t.normal}" + "{t.normal}{t.blue}" + f"{version}" + "{t.bold} ###" + "{t.normal}" ) STATUS = ( "{t.normal} Downloaded metadata for " - + "{t.bold}{t.magenta}{photos: 9d} 📷 photos " - + "{t.normal}{t.magenta}{photo_rate: 11.1f}/s\n" - + "{t.normal} and updated " - + "{t.bold}{t.red}{profiles: 9d} 👱 user profiles " - + "{t.normal}{t.red}{profile_rate: 3.1f}/s\n" - + "{t.normal} using " - + "{t.bold}{t.green}{workers: 9d} 💪 workers\n" - + "{t.normal}{t.bold} TODO: {todo: 12d} 🚧 time slots" - + "{t.normal}" + "{t.bold}{t.magenta}{photos: 9d} 📷 photos " + "{t.normal}{t.magenta}{photo_rate: 11.1f}/s\n" + "{t.normal} and updated " + "{t.bold}{t.red}{profiles: 9d} 👱 user profiles " + "{t.normal}{t.red}{profile_rate: 3.1f}/s\n" + "{t.normal} using " + "{t.bold}{t.green}{workers: 9d} 💪 workers\n" + "{t.normal}{t.bold} TODO: {todo: 12d} 🚧 time slots" + "{t.normal}" ) STATUS_LINES = len(STATUS.splitlines()) @@ -53,10 +53,10 @@ class FancyFlickrHistoryDownloader(BasicFlickrHistoryDownloader): SUMMARY = ( "{t.normal}Downloaded {t.bold}{t.magenta}{photos: 9d} 📷 photos " - + "{t.normal}{t.magenta}{photo_rate: 11.1f}/s\n" - + "{t.normal}and updated {t.bold}{t.red}{profiles: 9d} 👱 user profiles " - + "{t.normal}{t.red}{profile_rate: 3.1f}/s\n" - + "{t.normal}" + "{t.normal}{t.magenta}{photo_rate: 11.1f}/s\n" + "{t.normal}and updated {t.bold}{t.red}{profiles: 9d} 👱 user profiles " + "{t.normal}{t.red}{profile_rate: 3.1f}/s\n" + "{t.normal}" ) def __init__(self): diff --git a/src/flickrhistory/photodownloader.py b/src/flickrhistory/photodownloader.py index 29e3bb4..3930e1a 100644 --- a/src/flickrhistory/photodownloader.py +++ b/src/flickrhistory/photodownloader.py @@ -75,10 +75,8 @@ def photos(self): seconds=1 ): raise DownloadBatchIsTooLargeError( - ( - "More than 4000 rows returned ({:d}), " - + "please specify a shorter time span." - ).format(num_photos) + f"More than 4000 rows returned ({num_photos}), " + "please specify a shorter time span." ) for photo in results["photos"]["photo"]: diff --git a/src/flickrhistory/timespan.py b/src/flickrhistory/timespan.py index 519babe..857c4cc 100644 --- a/src/flickrhistory/timespan.py +++ b/src/flickrhistory/timespan.py @@ -24,8 +24,10 @@ def __init__(self, start, end): def __str__(self): """Return a string representation of this TimeSpan.""" return ( - "<{:s}" + "({:%Y-%m-%dT%H:%M:%S.000Z}-{:%Y-%m-%dT%H:%M:%S.000Z})>" - ).format(self.__class__.__name__, self.start, self.end) + f"<{self.__class__.__name__}" + f"({self.start:%Y-%m-%dT%H:%M:%S.000Z}" + f"-{self.end:%Y-%m-%dT%H:%M:%S.000Z})>" + ) def __repr__(self): """Represent this TimeSpan in readable form.""" From 58fbcae41a0ebb65fea8cfc5c66d88f05f6fbe29 Mon Sep 17 00:00:00 2001 From: Christoph Fink Date: Tue, 15 Apr 2025 15:19:19 +0200 Subject: [PATCH 2/2] missed one --- src/flickrhistory/databaseobjects.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/flickrhistory/databaseobjects.py b/src/flickrhistory/databaseobjects.py index eb534c7..8e6c092 100644 --- a/src/flickrhistory/databaseobjects.py +++ b/src/flickrhistory/databaseobjects.py @@ -246,7 +246,7 @@ def from_raw_api_data_flickrphotossearch(cls, data): def __str__(self): """Return a str representation.""" - return "".format(self.id) + return f"" def __repr(self): """Return a str representation."""