From bacf68248b2582699bff48f7f03b978086a8f36f Mon Sep 17 00:00:00 2001 From: mungai-njoroge Date: Mon, 11 Sep 2023 11:37:36 +0300 Subject: [PATCH] rewrite populate.py to minimize db and hdd reads + change process name in manage.py + update db query to save show albums as single, as an integer + enable periodic scans + misc --- app/api/artist.py | 4 +- app/db/sqlite/queries.py | 2 +- app/lib/artistlib.py | 16 ++++-- app/lib/populate.py | 34 +++++++++--- app/migrations/v1_3_0/__init__.py | 2 +- app/print_help.py | 2 +- app/settings.py | 8 ++- manage.py | 7 +++ poetry.lock | 86 ++++++++++++++++++++++++++++++- pyproject.toml | 1 + 10 files changed, 143 insertions(+), 19 deletions(-) diff --git a/app/api/artist.py b/app/api/artist.py index 6ce4c90..141544b 100644 --- a/app/api/artist.py +++ b/app/api/artist.py @@ -228,6 +228,8 @@ def get_artist(artisthash: str): except ValueError: year = 0 + decade = None + if year: decade = math.floor(year / 10) * 10 decade = str(decade)[2:] + "s" @@ -273,8 +275,8 @@ def get_artist_albums(artisthash: str): eps = [a for a in all_albums if a.is_EP] def remove_EPs_and_singles(albums_: list[Album]): - albums_ = [a for a in albums_ if not a.is_EP] albums_ = [a for a in albums_ if not a.is_single] + albums_ = [a for a in albums_ if not a.is_EP] return albums_ albums = filter(lambda a: artisthash in a.albumartists_hashes, all_albums) diff --git a/app/db/sqlite/queries.py b/app/db/sqlite/queries.py index cd7d8d9..317f11a 100644 --- a/app/db/sqlite/queries.py +++ b/app/db/sqlite/queries.py @@ -32,7 +32,7 @@ CREATE TABLE IF NOT EXISTS settings ( clean_album_title integer NOT NULL DEFAULT 1, remove_remaster integer NOT NULL DEFAULT 1, merge_albums integer NOT NULL DEFAULT 0, - show_albums_as_singles NOT NULL DEFAULT 0 + show_albums_as_singles integer NOT NULL DEFAULT 0 ); CREATE TABLE IF NOT EXISTS lastfm_similar_artists ( diff --git a/app/lib/artistlib.py b/app/lib/artistlib.py index 2bb7cb2..d247ca8 100644 --- a/app/lib/artistlib.py +++ b/app/lib/artistlib.py @@ -1,3 +1,4 @@ +import os import urllib from concurrent.futures import ThreadPoolExecutor from io import BytesIO @@ -79,15 +80,24 @@ class CheckArtistImages: global CHECK_ARTIST_IMAGES_KEY CHECK_ARTIST_IMAGES_KEY = instance_key - key_artist_map = ( - (instance_key, artist) for artist in artist_store.ArtistStore.artists + # read all files in the artist image folder + path = settings.Paths.get_artist_img_sm_path() + processed = "".join(os.listdir(path)).replace("webp", "") + + # filter out artists that already have an image + artists = filter( + lambda a: a.artisthash not in processed, artist_store.ArtistStore.artists ) + artists = list(artists) + + # process the rest + key_artist_map = ((instance_key, artist) for artist in artists) with ThreadPoolExecutor(max_workers=4) as executor: res = list( tqdm( executor.map(self.download_image, key_artist_map), - total=len(artist_store.ArtistStore.artists), + total=len(artists), desc="Downloading missing artist images", ) ) diff --git a/app/lib/populate.py b/app/lib/populate.py index 097264a..9f96427 100644 --- a/app/lib/populate.py +++ b/app/lib/populate.py @@ -101,9 +101,7 @@ class Populate: "Internet connection lost. Downloading artist images stopped." ) else: - log.warning( - f"No internet connection. Downloading artist images stopped!" - ) + log.warning(f"No internet connection. Downloading artist images stopped!") # Re-process the new artist images. if tried_to_download_new_images: @@ -247,13 +245,29 @@ class ProcessTrackThumbnails: """ def __init__(self, instance_key: str) -> None: - key_album_map = ((instance_key, album) for album in AlbumStore.albums) + """ + Filters out albums that already have thumbnails and + extracts the thumbnail for the other albums. + """ + path = settings.Paths.get_sm_thumb_path() + + # read all the files in the thumbnail directory + processed = "".join(os.listdir(path)).replace("webp", "") + + # filter out albums that already have thumbnails + albums = filter( + lambda album: album.albumhash not in processed, AlbumStore.albums + ) + albums = list(albums) + + # process the rest + key_album_map = ((instance_key, album) for album in albums) with ThreadPoolExecutor(max_workers=CPU_COUNT) as executor: results = list( tqdm( executor.map(get_image, key_album_map), - total=len(AlbumStore.albums), + total=len(albums), desc="Extracting track images", ) ) @@ -291,7 +305,15 @@ class FetchSimilarArtistsLastFM: """ def __init__(self, instance_key: str) -> None: - artists = ArtistStore.artists + # read all artists from db + processed = lastfmdb.get_all() + processed = ".".join(a.artisthash for a in processed) + + # filter out artists that already have similar artists + artists = filter(lambda a: a.artisthash not in processed, ArtistStore.artists) + artists = list(artists) + + # process the rest key_artist_map = ((instance_key, artist) for artist in artists) with ThreadPoolExecutor(max_workers=CPU_COUNT) as executor: diff --git a/app/migrations/v1_3_0/__init__.py b/app/migrations/v1_3_0/__init__.py index 9ae9679..b1df7b2 100644 --- a/app/migrations/v1_3_0/__init__.py +++ b/app/migrations/v1_3_0/__init__.py @@ -297,7 +297,7 @@ class UpdateAppSettingsTable(Migration): clean_album_title integer NOT NULL DEFAULT 1, remove_remaster integer NOT NULL DEFAULT 1, merge_albums integer NOT NULL DEFAULT 0, - show_albums_as_singles NOT NULL DEFAULT 0 + show_albums_as_singles integer NOT NULL DEFAULT 0 ); """ diff --git a/app/print_help.py b/app/print_help.py index 93d2905..76cc07f 100644 --- a/app/print_help.py +++ b/app/print_help.py @@ -28,7 +28,7 @@ local audio files. Like a cooler Spotify ... but bring your own music. Usage: swingmusic [options] -{tabulate(help_args_list, headers=["Option", "Short", "Description"], tablefmt="rounded_grid", maxcolwidths=[None, None, 44])} +{tabulate(help_args_list, headers=["Option", "Short", "Description"], tablefmt="markdown", maxcolwidths=[None, None, 44])} """ "80s, 90s, the noughties and today" diff --git a/app/settings.py b/app/settings.py index dfee3a2..2a6486a 100644 --- a/app/settings.py +++ b/app/settings.py @@ -168,7 +168,7 @@ class SessionVars: CLEAN_ALBUM_TITLE = True REMOVE_REMASTER_FROM_TRACK = True - DO_PERIODIC_SCANS = False + DO_PERIODIC_SCANS = True PERIODIC_SCAN_INTERVAL = 600 # 10 minutes """ The interval between periodic scans in seconds. @@ -176,7 +176,7 @@ class SessionVars: MERGE_ALBUM_VERSIONS = False ARTIST_SEPARATORS = set() - SHOW_ALBUMS_AS_SINGLES = True + SHOW_ALBUMS_AS_SINGLES = False # TODO: Find a way to eliminate this class without breaking typings @@ -189,9 +189,7 @@ class SessionVarKeys: PERIODIC_SCAN_INTERVAL = "PERIODIC_SCAN_INTERVAL" MERGE_ALBUM_VERSIONS = "MERGE_ALBUM_VERSIONS" ARTIST_SEPARATORS = "ARTIST_SEPARATORS" - SHOW_ALBUMS_AS_SINGLES = ( - "SHOW_ALBUMS_AS_SINGLES" - ) + SHOW_ALBUMS_AS_SINGLES = "SHOW_ALBUMS_AS_SINGLES" def get_flag(key: SessionVarKeys) -> bool: diff --git a/manage.py b/manage.py index c0a289c..45b6bb0 100644 --- a/manage.py +++ b/manage.py @@ -5,6 +5,7 @@ import logging import mimetypes import os +import setproctitle from flask import request from app.api import create_api @@ -18,6 +19,7 @@ from app.utils.filesystem import get_home_res_path from app.utils.threading import background mimetypes.add_type("text/css", ".css") + mimetypes.add_type("text/javascript", ".js") mimetypes.add_type("text/plain", ".txt") mimetypes.add_type("text/html", ".html") @@ -76,6 +78,11 @@ def start_watchdog(): WatchDog().run() +setproctitle.setproctitle( + f"swingmusic - {FLASKVARS.FLASK_HOST}:{FLASKVARS.FLASK_PORT}" +) + + if __name__ == "__main__": HandleArgs() log_startup_info() diff --git a/poetry.lock b/poetry.lock index b2011fe..b80c610 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1148,6 +1148,90 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "setproctitle" +version = "1.3.2" +description = "A Python module to customize the process title" +optional = false +python-versions = ">=3.7" +files = [ + {file = "setproctitle-1.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:288943dec88e178bb2fd868adf491197cc0fc8b6810416b1c6775e686bab87fe"}, + {file = "setproctitle-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:630f6fe5e24a619ccf970c78e084319ee8be5be253ecc9b5b216b0f474f5ef18"}, + {file = "setproctitle-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c877691b90026670e5a70adfbcc735460a9f4c274d35ec5e8a43ce3f8443005"}, + {file = "setproctitle-1.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7a55fe05f15c10e8c705038777656fe45e3bd676d49ad9ac8370b75c66dd7cd7"}, + {file = "setproctitle-1.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab45146c71ca6592c9cc8b354a2cc9cc4843c33efcbe1d245d7d37ce9696552d"}, + {file = "setproctitle-1.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e00c9d5c541a2713ba0e657e0303bf96ddddc412ef4761676adc35df35d7c246"}, + {file = "setproctitle-1.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:265ecbe2c6eafe82e104f994ddd7c811520acdd0647b73f65c24f51374cf9494"}, + {file = "setproctitle-1.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c2c46200656280a064073447ebd363937562debef329482fd7e570c8d498f806"}, + {file = "setproctitle-1.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:fa2f50678f04fda7a75d0fe5dd02bbdd3b13cbe6ed4cf626e4472a7ccf47ae94"}, + {file = "setproctitle-1.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7f2719a398e1a2c01c2a63bf30377a34d0b6ef61946ab9cf4d550733af8f1ef1"}, + {file = "setproctitle-1.3.2-cp310-cp310-win32.whl", hash = "sha256:e425be62524dc0c593985da794ee73eb8a17abb10fe692ee43bb39e201d7a099"}, + {file = "setproctitle-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:e85e50b9c67854f89635a86247412f3ad66b132a4d8534ac017547197c88f27d"}, + {file = "setproctitle-1.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2a97d51c17d438cf5be284775a322d57b7ca9505bb7e118c28b1824ecaf8aeaa"}, + {file = "setproctitle-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:587c7d6780109fbd8a627758063d08ab0421377c0853780e5c356873cdf0f077"}, + {file = "setproctitle-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d17c8bd073cbf8d141993db45145a70b307385b69171d6b54bcf23e5d644de"}, + {file = "setproctitle-1.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e932089c35a396dc31a5a1fc49889dd559548d14cb2237adae260382a090382e"}, + {file = "setproctitle-1.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e4f8f12258a8739c565292a551c3db62cca4ed4f6b6126664e2381acb4931bf"}, + {file = "setproctitle-1.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:570d255fd99c7f14d8f91363c3ea96bd54f8742275796bca67e1414aeca7d8c3"}, + {file = "setproctitle-1.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a8e0881568c5e6beff91ef73c0ec8ac2a9d3ecc9edd6bd83c31ca34f770910c4"}, + {file = "setproctitle-1.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4bba3be4c1fabf170595b71f3af46c6d482fbe7d9e0563999b49999a31876f77"}, + {file = "setproctitle-1.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:37ece938110cab2bb3957e3910af8152ca15f2b6efdf4f2612e3f6b7e5459b80"}, + {file = "setproctitle-1.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db684d6bbb735a80bcbc3737856385b55d53f8a44ce9b46e9a5682c5133a9bf7"}, + {file = "setproctitle-1.3.2-cp311-cp311-win32.whl", hash = "sha256:ca58cd260ea02759238d994cfae844fc8b1e206c684beb8f38877dcab8451dfc"}, + {file = "setproctitle-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:88486e6cce2a18a033013d17b30a594f1c5cb42520c49c19e6ade40b864bb7ff"}, + {file = "setproctitle-1.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:92c626edc66169a1b09e9541b9c0c9f10488447d8a2b1d87c8f0672e771bc927"}, + {file = "setproctitle-1.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:710e16fa3bade3b026907e4a5e841124983620046166f355bbb84be364bf2a02"}, + {file = "setproctitle-1.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f29b75e86260b0ab59adb12661ef9f113d2f93a59951373eb6d68a852b13e83"}, + {file = "setproctitle-1.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c8d9650154afaa86a44ff195b7b10d683c73509d085339d174e394a22cccbb9"}, + {file = "setproctitle-1.3.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0452282258dfcc01697026a8841258dd2057c4438b43914b611bccbcd048f10"}, + {file = "setproctitle-1.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e49ae693306d7624015f31cb3e82708916759d592c2e5f72a35c8f4cc8aef258"}, + {file = "setproctitle-1.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1ff863a20d1ff6ba2c24e22436a3daa3cd80be1dfb26891aae73f61b54b04aca"}, + {file = "setproctitle-1.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:55ce1e9925ce1765865442ede9dca0ba9bde10593fcd570b1f0fa25d3ec6b31c"}, + {file = "setproctitle-1.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7fe9df7aeb8c64db6c34fc3b13271a363475d77bc157d3f00275a53910cb1989"}, + {file = "setproctitle-1.3.2-cp37-cp37m-win32.whl", hash = "sha256:e5c50e164cd2459bc5137c15288a9ef57160fd5cbf293265ea3c45efe7870865"}, + {file = "setproctitle-1.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:a499fff50387c1520c085a07578a000123f519e5f3eee61dd68e1d301659651f"}, + {file = "setproctitle-1.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5b932c3041aa924163f4aab970c2f0e6b4d9d773f4d50326e0ea1cd69240e5c5"}, + {file = "setproctitle-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f4bfc89bd33ebb8e4c0e9846a09b1f5a4a86f5cb7a317e75cc42fee1131b4f4f"}, + {file = "setproctitle-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcd3cf4286a60fdc95451d8d14e0389a6b4f5cebe02c7f2609325eb016535963"}, + {file = "setproctitle-1.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5fb4f769c02f63fac90989711a3fee83919f47ae9afd4758ced5d86596318c65"}, + {file = "setproctitle-1.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5194b4969f82ea842a4f6af2f82cd16ebdc3f1771fb2771796e6add9835c1973"}, + {file = "setproctitle-1.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f0cde41857a644b7353a0060b5f94f7ba7cf593ebde5a1094da1be581ac9a31"}, + {file = "setproctitle-1.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9124bedd8006b0e04d4e8a71a0945da9b67e7a4ab88fdad7b1440dc5b6122c42"}, + {file = "setproctitle-1.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8a09d570b39517de10ee5b718730e171251ce63bbb890c430c725c8c53d4484"}, + {file = "setproctitle-1.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:8ff3c8cb26afaed25e8bca7b9dd0c1e36de71f35a3a0706b5c0d5172587a3827"}, + {file = "setproctitle-1.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:589be87172b238f839e19f146b9ea47c71e413e951ef0dc6db4218ddacf3c202"}, + {file = "setproctitle-1.3.2-cp38-cp38-win32.whl", hash = "sha256:4749a2b0c9ac52f864d13cee94546606f92b981b50e46226f7f830a56a9dc8e1"}, + {file = "setproctitle-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:e43f315c68aa61cbdef522a2272c5a5b9b8fd03c301d3167b5e1343ef50c676c"}, + {file = "setproctitle-1.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:de3a540cd1817ede31f530d20e6a4935bbc1b145fd8f8cf393903b1e02f1ae76"}, + {file = "setproctitle-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4058564195b975ddc3f0462375c533cce310ccdd41b80ac9aed641c296c3eff4"}, + {file = "setproctitle-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c5d5dad7c28bdd1ec4187d818e43796f58a845aa892bb4481587010dc4d362b"}, + {file = "setproctitle-1.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ffc61a388a5834a97953d6444a2888c24a05f2e333f9ed49f977a87bb1ad4761"}, + {file = "setproctitle-1.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fa1a0fbee72b47dc339c87c890d3c03a72ea65c061ade3204f285582f2da30f"}, + {file = "setproctitle-1.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe8a988c7220c002c45347430993830666e55bc350179d91fcee0feafe64e1d4"}, + {file = "setproctitle-1.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bae283e85fc084b18ffeb92e061ff7ac5af9e183c9d1345c93e178c3e5069cbe"}, + {file = "setproctitle-1.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fed18e44711c5af4b681c2b3b18f85e6f0f1b2370a28854c645d636d5305ccd8"}, + {file = "setproctitle-1.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:b34baef93bfb20a8ecb930e395ccd2ae3268050d8cf4fe187de5e2bd806fd796"}, + {file = "setproctitle-1.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7f0bed90a216ef28b9d227d8d73e28a8c9b88c0f48a082d13ab3fa83c581488f"}, + {file = "setproctitle-1.3.2-cp39-cp39-win32.whl", hash = "sha256:4d8938249a7cea45ab7e1e48b77685d0f2bab1ebfa9dde23e94ab97968996a7c"}, + {file = "setproctitle-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:a47d97a75fd2d10c37410b180f67a5835cb1d8fdea2648fd7f359d4277f180b9"}, + {file = "setproctitle-1.3.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:dad42e676c5261eb50fdb16bdf3e2771cf8f99a79ef69ba88729aeb3472d8575"}, + {file = "setproctitle-1.3.2-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c91b9bc8985d00239f7dc08a49927a7ca1ca8a6af2c3890feec3ed9665b6f91e"}, + {file = "setproctitle-1.3.2-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8579a43eafd246e285eb3a5b939e7158073d5087aacdd2308f23200eac2458b"}, + {file = "setproctitle-1.3.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:2fbd8187948284293f43533c150cd69a0e4192c83c377da837dbcd29f6b83084"}, + {file = "setproctitle-1.3.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:faec934cfe5fd6ac1151c02e67156c3f526e82f96b24d550b5d51efa4a5527c6"}, + {file = "setproctitle-1.3.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1aafc91cbdacc9e5fe712c52077369168e6b6c346f3a9d51bf600b53eae56bb"}, + {file = "setproctitle-1.3.2-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b617f12c9be61e8f4b2857be4a4319754756845dbbbd9c3718f468bbb1e17bcb"}, + {file = "setproctitle-1.3.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b2c9cb2705fc84cb8798f1ba74194f4c080aaef19d9dae843591c09b97678e98"}, + {file = "setproctitle-1.3.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a149a5f7f2c5a065d4e63cb0d7a4b6d3b66e6e80f12e3f8827c4f63974cbf122"}, + {file = "setproctitle-1.3.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e3ac25bfc4a0f29d2409650c7532d5ddfdbf29f16f8a256fc31c47d0dc05172"}, + {file = "setproctitle-1.3.2-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65d884e22037b23fa25b2baf1a3316602ed5c5971eb3e9d771a38c3a69ce6e13"}, + {file = "setproctitle-1.3.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7aa0aac1711fadffc1d51e9d00a3bea61f68443d6ac0241a224e4d622489d665"}, + {file = "setproctitle-1.3.2.tar.gz", hash = "sha256:b9fb97907c830d260fa0658ed58afd48a86b2b88aac521135c352ff7fd3477fd"}, +] + +[package.extras] +test = ["pytest"] + [[package]] name = "setuptools" version = "68.0.0" @@ -1453,4 +1537,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.12" -content-hash = "0052648520a30e34301208917b639bcd2ca9a0a09a557537126d300aa5ffeeed" +content-hash = "814d7029bd78a55883c80b4c1e738c7e4f0238825fecffa60ee7030aeb1a6cb1" diff --git a/pyproject.toml b/pyproject.toml index 51f6a51..8525f63 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,6 +22,7 @@ show-in-file-manager = "^1.1.4" pendulum = "^2.1.2" flask-compress = "^1.13" tabulate = "^0.9.0" +setproctitle = "^1.3.2" [tool.poetry.dev-dependencies] pylint = "^2.15.5"