mirror of
https://github.com/tcsenpai/swingmusic.git
synced 2025-06-08 12:15:39 +00:00
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
This commit is contained in:
parent
e9284de91f
commit
bacf68248b
@ -228,6 +228,8 @@ def get_artist(artisthash: str):
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
year = 0
|
year = 0
|
||||||
|
|
||||||
|
decade = None
|
||||||
|
|
||||||
if year:
|
if year:
|
||||||
decade = math.floor(year / 10) * 10
|
decade = math.floor(year / 10) * 10
|
||||||
decade = str(decade)[2:] + "s"
|
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]
|
eps = [a for a in all_albums if a.is_EP]
|
||||||
|
|
||||||
def remove_EPs_and_singles(albums_: list[Album]):
|
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_single]
|
||||||
|
albums_ = [a for a in albums_ if not a.is_EP]
|
||||||
return albums_
|
return albums_
|
||||||
|
|
||||||
albums = filter(lambda a: artisthash in a.albumartists_hashes, all_albums)
|
albums = filter(lambda a: artisthash in a.albumartists_hashes, all_albums)
|
||||||
|
@ -32,7 +32,7 @@ CREATE TABLE IF NOT EXISTS settings (
|
|||||||
clean_album_title integer NOT NULL DEFAULT 1,
|
clean_album_title integer NOT NULL DEFAULT 1,
|
||||||
remove_remaster integer NOT NULL DEFAULT 1,
|
remove_remaster integer NOT NULL DEFAULT 1,
|
||||||
merge_albums integer NOT NULL DEFAULT 0,
|
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 (
|
CREATE TABLE IF NOT EXISTS lastfm_similar_artists (
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import os
|
||||||
import urllib
|
import urllib
|
||||||
from concurrent.futures import ThreadPoolExecutor
|
from concurrent.futures import ThreadPoolExecutor
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
@ -79,15 +80,24 @@ class CheckArtistImages:
|
|||||||
global CHECK_ARTIST_IMAGES_KEY
|
global CHECK_ARTIST_IMAGES_KEY
|
||||||
CHECK_ARTIST_IMAGES_KEY = instance_key
|
CHECK_ARTIST_IMAGES_KEY = instance_key
|
||||||
|
|
||||||
key_artist_map = (
|
# read all files in the artist image folder
|
||||||
(instance_key, artist) for artist in artist_store.ArtistStore.artists
|
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:
|
with ThreadPoolExecutor(max_workers=4) as executor:
|
||||||
res = list(
|
res = list(
|
||||||
tqdm(
|
tqdm(
|
||||||
executor.map(self.download_image, key_artist_map),
|
executor.map(self.download_image, key_artist_map),
|
||||||
total=len(artist_store.ArtistStore.artists),
|
total=len(artists),
|
||||||
desc="Downloading missing artist images",
|
desc="Downloading missing artist images",
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -101,9 +101,7 @@ class Populate:
|
|||||||
"Internet connection lost. Downloading artist images stopped."
|
"Internet connection lost. Downloading artist images stopped."
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
log.warning(
|
log.warning(f"No internet connection. Downloading artist images stopped!")
|
||||||
f"No internet connection. Downloading artist images stopped!"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Re-process the new artist images.
|
# Re-process the new artist images.
|
||||||
if tried_to_download_new_images:
|
if tried_to_download_new_images:
|
||||||
@ -247,13 +245,29 @@ class ProcessTrackThumbnails:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, instance_key: str) -> None:
|
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:
|
with ThreadPoolExecutor(max_workers=CPU_COUNT) as executor:
|
||||||
results = list(
|
results = list(
|
||||||
tqdm(
|
tqdm(
|
||||||
executor.map(get_image, key_album_map),
|
executor.map(get_image, key_album_map),
|
||||||
total=len(AlbumStore.albums),
|
total=len(albums),
|
||||||
desc="Extracting track images",
|
desc="Extracting track images",
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -291,7 +305,15 @@ class FetchSimilarArtistsLastFM:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, instance_key: str) -> None:
|
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)
|
key_artist_map = ((instance_key, artist) for artist in artists)
|
||||||
|
|
||||||
with ThreadPoolExecutor(max_workers=CPU_COUNT) as executor:
|
with ThreadPoolExecutor(max_workers=CPU_COUNT) as executor:
|
||||||
|
@ -297,7 +297,7 @@ class UpdateAppSettingsTable(Migration):
|
|||||||
clean_album_title integer NOT NULL DEFAULT 1,
|
clean_album_title integer NOT NULL DEFAULT 1,
|
||||||
remove_remaster integer NOT NULL DEFAULT 1,
|
remove_remaster integer NOT NULL DEFAULT 1,
|
||||||
merge_albums integer NOT NULL DEFAULT 0,
|
merge_albums integer NOT NULL DEFAULT 0,
|
||||||
show_albums_as_singles NOT NULL DEFAULT 0
|
show_albums_as_singles integer NOT NULL DEFAULT 0
|
||||||
);
|
);
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ local audio files. Like a cooler Spotify ... but bring your own music.
|
|||||||
|
|
||||||
Usage: swingmusic [options]
|
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"
|
"80s, 90s, the noughties and today"
|
||||||
|
@ -168,7 +168,7 @@ class SessionVars:
|
|||||||
CLEAN_ALBUM_TITLE = True
|
CLEAN_ALBUM_TITLE = True
|
||||||
REMOVE_REMASTER_FROM_TRACK = True
|
REMOVE_REMASTER_FROM_TRACK = True
|
||||||
|
|
||||||
DO_PERIODIC_SCANS = False
|
DO_PERIODIC_SCANS = True
|
||||||
PERIODIC_SCAN_INTERVAL = 600 # 10 minutes
|
PERIODIC_SCAN_INTERVAL = 600 # 10 minutes
|
||||||
"""
|
"""
|
||||||
The interval between periodic scans in seconds.
|
The interval between periodic scans in seconds.
|
||||||
@ -176,7 +176,7 @@ class SessionVars:
|
|||||||
|
|
||||||
MERGE_ALBUM_VERSIONS = False
|
MERGE_ALBUM_VERSIONS = False
|
||||||
ARTIST_SEPARATORS = set()
|
ARTIST_SEPARATORS = set()
|
||||||
SHOW_ALBUMS_AS_SINGLES = True
|
SHOW_ALBUMS_AS_SINGLES = False
|
||||||
|
|
||||||
|
|
||||||
# TODO: Find a way to eliminate this class without breaking typings
|
# TODO: Find a way to eliminate this class without breaking typings
|
||||||
@ -189,9 +189,7 @@ class SessionVarKeys:
|
|||||||
PERIODIC_SCAN_INTERVAL = "PERIODIC_SCAN_INTERVAL"
|
PERIODIC_SCAN_INTERVAL = "PERIODIC_SCAN_INTERVAL"
|
||||||
MERGE_ALBUM_VERSIONS = "MERGE_ALBUM_VERSIONS"
|
MERGE_ALBUM_VERSIONS = "MERGE_ALBUM_VERSIONS"
|
||||||
ARTIST_SEPARATORS = "ARTIST_SEPARATORS"
|
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:
|
def get_flag(key: SessionVarKeys) -> bool:
|
||||||
|
@ -5,6 +5,7 @@ import logging
|
|||||||
import mimetypes
|
import mimetypes
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
import setproctitle
|
||||||
from flask import request
|
from flask import request
|
||||||
|
|
||||||
from app.api import create_api
|
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
|
from app.utils.threading import background
|
||||||
|
|
||||||
mimetypes.add_type("text/css", ".css")
|
mimetypes.add_type("text/css", ".css")
|
||||||
|
|
||||||
mimetypes.add_type("text/javascript", ".js")
|
mimetypes.add_type("text/javascript", ".js")
|
||||||
mimetypes.add_type("text/plain", ".txt")
|
mimetypes.add_type("text/plain", ".txt")
|
||||||
mimetypes.add_type("text/html", ".html")
|
mimetypes.add_type("text/html", ".html")
|
||||||
@ -76,6 +78,11 @@ def start_watchdog():
|
|||||||
WatchDog().run()
|
WatchDog().run()
|
||||||
|
|
||||||
|
|
||||||
|
setproctitle.setproctitle(
|
||||||
|
f"swingmusic - {FLASKVARS.FLASK_HOST}:{FLASKVARS.FLASK_PORT}"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
HandleArgs()
|
HandleArgs()
|
||||||
log_startup_info()
|
log_startup_info()
|
||||||
|
86
poetry.lock
generated
86
poetry.lock
generated
@ -1148,6 +1148,90 @@ urllib3 = ">=1.21.1,<3"
|
|||||||
socks = ["PySocks (>=1.5.6,!=1.5.7)"]
|
socks = ["PySocks (>=1.5.6,!=1.5.7)"]
|
||||||
use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
|
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]]
|
[[package]]
|
||||||
name = "setuptools"
|
name = "setuptools"
|
||||||
version = "68.0.0"
|
version = "68.0.0"
|
||||||
@ -1453,4 +1537,4 @@ files = [
|
|||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.0"
|
lock-version = "2.0"
|
||||||
python-versions = ">=3.10,<3.12"
|
python-versions = ">=3.10,<3.12"
|
||||||
content-hash = "0052648520a30e34301208917b639bcd2ca9a0a09a557537126d300aa5ffeeed"
|
content-hash = "814d7029bd78a55883c80b4c1e738c7e4f0238825fecffa60ee7030aeb1a6cb1"
|
||||||
|
@ -22,6 +22,7 @@ show-in-file-manager = "^1.1.4"
|
|||||||
pendulum = "^2.1.2"
|
pendulum = "^2.1.2"
|
||||||
flask-compress = "^1.13"
|
flask-compress = "^1.13"
|
||||||
tabulate = "^0.9.0"
|
tabulate = "^0.9.0"
|
||||||
|
setproctitle = "^1.3.2"
|
||||||
|
|
||||||
[tool.poetry.dev-dependencies]
|
[tool.poetry.dev-dependencies]
|
||||||
pylint = "^2.15.5"
|
pylint = "^2.15.5"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user