Skip to content

Commit c14ec4b

Browse files
committed
fix: multiprocessing problems
1 parent 29a9164 commit c14ec4b

File tree

6 files changed

+42
-12
lines changed

6 files changed

+42
-12
lines changed

app/db/engine.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
from contextlib import contextmanager
2-
from sqlalchemy import Engine, event
2+
from sqlalchemy import Engine, create_engine, event
33
from sqlalchemy.orm import sessionmaker
44

5+
from app.settings import DbPaths
6+
57

68
@event.listens_for(Engine, "connect")
79
def set_sqlite_pragma(dbapi_connection, connection_record):
@@ -14,13 +16,35 @@ def set_sqlite_pragma(dbapi_connection, connection_record):
1416
cursor.execute("PRAGMA mmap_size=0")
1517
cursor.close()
1618

19+
class classproperty(property):
20+
"""
21+
A class property decorator.
22+
"""
23+
24+
def __get__(self, owner_self, owner_cls):
25+
if self.fget:
26+
return self.fget(owner_cls)
27+
28+
1729

1830
class DbEngine:
1931
"""
2032
The database engine instance.
2133
"""
2234

23-
engine: Engine
35+
_engine: Engine | None = None
36+
37+
@classproperty
38+
def engine(cls) -> Engine:
39+
if not cls._engine:
40+
cls._engine = create_engine(
41+
f"sqlite+pysqlite:///{DbPaths.get_app_db_path()}",
42+
echo=False,
43+
max_overflow=20,
44+
pool_size=10,
45+
)
46+
47+
return cls._engine
2448

2549
@classmethod
2650
@contextmanager

app/lib/artistlib.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import math
21
import os
32
import time
3+
import random
44
import urllib
55
import requests
6-
import multiprocessing
76

87
from io import BytesIO
98
from pathlib import Path
@@ -29,8 +28,6 @@
2928
PngImagePlugin.MAX_TEXT_CHUNK = LARGE_ENOUGH_NUMBER * (1024**2)
3029
# https://stackoverflow.com/a/61466412
3130

32-
import random
33-
3431

3532
def get_artist_image_link(artist: str):
3633
"""

app/lib/tagger.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def extract_thumb_with_overwrite(tracks: list[dict[str, str]]):
6969
extract_thumb(
7070
track["filepath"], track["albumhash"] + ".webp", overwrite=True
7171
)
72-
except FileNotFoundError:
72+
except (FileNotFoundError, KeyError):
7373
continue
7474

7575
@staticmethod

app/settings.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@ def set_config_dir(cls, path: str):
2929

3030
@classmethod
3131
def get_config_dir(cls):
32-
return cls.XDG_CONFIG_DIR or os.path.realpath(".")
32+
return (
33+
cls.XDG_CONFIG_DIR
34+
or os.environ.get("SWINGMUSIC_XDG_CONFIG_DIR")
35+
or os.path.realpath(".")
36+
)
3337

3438
@classmethod
3539
def get_config_folder(cls):

app/setup/sqlite.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def setup_sqlite():
2424
"""
2525
Create Sqlite databases and tables.
2626
"""
27-
DbEngine.engine = create_engine(
27+
DbEngine._engine = create_engine(
2828
f"sqlite+pysqlite:///{DbPaths.get_app_db_path()}",
2929
echo=False,
3030
max_overflow=20,

main.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import multiprocessing
2-
import pathlib
3-
import click
1+
import os
42
import sys
3+
import click
4+
import pathlib
5+
import multiprocessing
56
from app.arg_handler import handle_build, handle_password_reset
67
from app.utils.filesystem import get_home_res_path
78
from app.utils.xdg_utils import get_xdg_config_dir
@@ -66,6 +67,10 @@ def version(*args, **kwargs):
6667
is_eager=True,
6768
)
6869
def run(*args, **kwargs):
70+
# INFO: Set the config dir as an environment variable
71+
os.environ["SWINGMUSIC_XDG_CONFIG_DIR"] = str(
72+
pathlib.Path(kwargs["config"]).resolve()
73+
)
6974
run_app(kwargs["host"], kwargs["port"], kwargs["config"])
7075

7176

0 commit comments

Comments
 (0)