Skip to content

Commit 692d679

Browse files
authored
Merge pull request #150 from dylanljones/pre-commit-ci-update-config
2 parents 75be982 + 574bcd6 commit 692d679

File tree

8 files changed

+76
-231
lines changed

8 files changed

+76
-231
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ repos:
1313
- id: check-yaml
1414

1515
- repo: https://github.com/astral-sh/ruff-pre-commit
16-
rev: v0.9.9
16+
rev: v0.9.10
1717
hooks:
1818
# Run the linter.
1919
- id: ruff

pyrekordbox/anlz/tags.py

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -162,13 +162,9 @@ def set(self, beats, bpms, times):
162162
n_bpms = len(bpms)
163163
n_times = len(times)
164164
if n_bpms != n_beats:
165-
raise ValueError(
166-
f"Number of bpms not equal to number of beats: {n_bpms} != {n_beats}"
167-
)
165+
raise ValueError(f"Number of bpms not equal to number of beats: {n_bpms} != {n_beats}")
168166
if n_times != n_beats:
169-
raise ValueError(
170-
f"Number of times not equal to number of beats: {n_bpms} != {n_times}"
171-
)
167+
raise ValueError(f"Number of times not equal to number of beats: {n_bpms} != {n_times}")
172168

173169
# For now only values of existing beats can be set
174170
if n_beats != n:
@@ -184,9 +180,7 @@ def set_beats(self, beats):
184180
n = len(self.content.entries)
185181
n_new = len(beats)
186182
if n_new != n:
187-
raise ValueError(
188-
f"Number of beats not equal to current content length: {n_new} != {n}"
189-
)
183+
raise ValueError(f"Number of beats not equal to current content length: {n_new} != {n}")
190184

191185
for i, beat in enumerate(beats):
192186
self.content.entries[i].beat = beat
@@ -195,9 +189,7 @@ def set_bpms(self, bpms):
195189
n = len(self.content.entries)
196190
n_new = len(bpms)
197191
if n_new != n:
198-
raise ValueError(
199-
f"Number of bpms not equal to current content length: {n_new} != {n}"
200-
)
192+
raise ValueError(f"Number of bpms not equal to current content length: {n_new} != {n}")
201193

202194
for i, bpm in enumerate(bpms):
203195
self.content.entries[i].tempo = int(bpm * 100)
@@ -206,9 +198,7 @@ def set_times(self, times):
206198
n = len(self.content.entries)
207199
n_new = len(times)
208200
if n_new != n:
209-
raise ValueError(
210-
f"Number of times not equal to current content length: {n_new} != {n}"
211-
)
201+
raise ValueError(f"Number of times not equal to current content length: {n_new} != {n}")
212202

213203
for i, t in enumerate(times):
214204
self.content.entries[i].time = int(1000 * t)

pyrekordbox/config.py

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -234,12 +234,7 @@ def read_rekordbox6_asar(rb6_install_dir: Union[str, Path]) -> str:
234234
if not str(rb6_install_dir).endswith(".app"):
235235
rb6_install_dir = rb6_install_dir / "rekordbox.app"
236236
location = (
237-
rb6_install_dir
238-
/ "Contents"
239-
/ "MacOS"
240-
/ "rekordboxAgent.app"
241-
/ "Contents"
242-
/ "Resources"
237+
rb6_install_dir / "Contents" / "MacOS" / "rekordboxAgent.app" / "Contents" / "Resources"
243238
)
244239
encoding = "cp437"
245240
else:
@@ -360,9 +355,7 @@ def _get_rb_config(
360355
return conf
361356

362357

363-
def _get_rb5_config(
364-
pioneer_prog_dir: Path, pioneer_app_dir: Path, dirname: str = ""
365-
) -> dict:
358+
def _get_rb5_config(pioneer_prog_dir: Path, pioneer_app_dir: Path, dirname: str = "") -> dict:
366359
"""Get the program configuration for Rekordbox v5.x.x."""
367360
major_version = 5
368361
conf = _get_rb_config(pioneer_prog_dir, pioneer_app_dir, major_version, dirname)
@@ -414,8 +407,7 @@ def run(self):
414407
pid = get_rekordbox_pid()
415408
if pid:
416409
raise RuntimeError(
417-
"Rekordbox is running. "
418-
"Please close Rekordbox before running the `KeyExtractor`."
410+
"Rekordbox is running. Please close Rekordbox before running the `KeyExtractor`."
419411
)
420412
# Spawn Rekordbox process and attach to it
421413
pid = frida.spawn(self.executable)
@@ -551,9 +543,7 @@ def _update_sqlite_key(opts, conf):
551543
conf["dp"] = dp
552544

553545

554-
def _get_rb6_config(
555-
pioneer_prog_dir: Path, pioneer_app_dir: Path, dirname: str = ""
556-
) -> dict:
546+
def _get_rb6_config(pioneer_prog_dir: Path, pioneer_app_dir: Path, dirname: str = "") -> dict:
557547
"""Get the program configuration for Rekordbox v6.x.x."""
558548
major_version = 6
559549
conf = _get_rb_config(pioneer_prog_dir, pioneer_app_dir, major_version, dirname)
@@ -571,9 +561,7 @@ def _get_rb6_config(
571561
return conf
572562

573563

574-
def _get_rb7_config(
575-
pioneer_prog_dir: Path, pioneer_app_dir: Path, dirname: str = ""
576-
) -> dict:
564+
def _get_rb7_config(pioneer_prog_dir: Path, pioneer_app_dir: Path, dirname: str = "") -> dict:
577565
"""Get the program configuration for Rekordbox v7.x.x."""
578566
major_version = 7
579567
conf = _get_rb_config(pioneer_prog_dir, pioneer_app_dir, major_version, dirname)
@@ -715,27 +703,21 @@ def update_config(
715703

716704
# Update Rekordbox 5 config
717705
try:
718-
conf = _get_rb5_config(
719-
pioneer_install_dir, pioneer_app_dir, rb5_install_dirname
720-
)
706+
conf = _get_rb5_config(pioneer_install_dir, pioneer_app_dir, rb5_install_dirname)
721707
__config__["rekordbox5"].update(conf)
722708
except FileNotFoundError as e:
723709
logger.info(e)
724710

725711
# Update Rekordbox 6 config
726712
try:
727-
conf = _get_rb6_config(
728-
pioneer_install_dir, pioneer_app_dir, rb6_install_dirname
729-
)
713+
conf = _get_rb6_config(pioneer_install_dir, pioneer_app_dir, rb6_install_dirname)
730714
__config__["rekordbox6"].update(conf)
731715
except FileNotFoundError as e:
732716
logger.info(e)
733717

734718
# Update Rekordbox 7 config
735719
try:
736-
conf = _get_rb7_config(
737-
pioneer_install_dir, pioneer_app_dir, rb7_install_dirname
738-
)
720+
conf = _get_rb7_config(pioneer_install_dir, pioneer_app_dir, rb7_install_dirname)
739721
__config__["rekordbox7"].update(conf)
740722
except FileNotFoundError as e:
741723
logger.info(e)

pyrekordbox/db6/database.py

Lines changed: 20 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -114,19 +114,15 @@ def __init__(self, path=None, db_dir="", key="", unlock=True):
114114
path = rb_config.get("db_path", "")
115115
if not path:
116116
pdir = get_config("pioneer", "install_dir")
117-
raise FileNotFoundError(
118-
f"No Rekordbox v6/v7 directory found in '{pdir}'"
119-
)
117+
raise FileNotFoundError(f"No Rekordbox v6/v7 directory found in '{pdir}'")
120118
path = Path(path)
121119
# make sure file exists
122120
if not path.exists():
123121
raise FileNotFoundError(f"File '{path}' does not exist!")
124122
# Open database
125123
if unlock:
126124
if not _sqlcipher_available:
127-
raise ImportError(
128-
"Could not unlock database: 'sqlcipher3' package not found"
129-
)
125+
raise ImportError("Could not unlock database: 'sqlcipher3' package not found")
130126
if not key:
131127
try:
132128
key = rb_config["dp"]
@@ -727,9 +723,7 @@ def get_uuid_map(self, **kwargs):
727723

728724
# -- Database updates --------------------------------------------------------------
729725

730-
def generate_unused_id(
731-
self, table, is_28_bit: bool = True, id_field_name: str = "ID"
732-
) -> int:
726+
def generate_unused_id(self, table, is_28_bit: bool = True, id_field_name: str = "ID") -> int:
733727
"""Generates an unused ID for the given table."""
734728
max_tries = 1000000
735729
for _ in range(max_tries):
@@ -804,20 +798,14 @@ def add_to_playlist(self, playlist, content, track_no=None):
804798
uuid = str(uuid4())
805799
id_ = str(uuid4())
806800
now = datetime.datetime.now()
807-
nsongs = (
808-
self.query(tables.DjmdSongPlaylist)
809-
.filter_by(PlaylistID=playlist.ID)
810-
.count()
811-
)
801+
nsongs = self.query(tables.DjmdSongPlaylist).filter_by(PlaylistID=playlist.ID).count()
812802
if track_no is not None:
813803
insert_at_end = False
814804
track_no = int(track_no)
815805
if track_no < 1:
816806
raise ValueError("Track number must be greater than 0")
817807
if track_no > nsongs + 1:
818-
raise ValueError(
819-
f"Track number too high, parent contains {nsongs} items"
820-
)
808+
raise ValueError(f"Track number too high, parent contains {nsongs} items")
821809
else:
822810
insert_at_end = True
823811
track_no = nsongs + 1
@@ -893,9 +881,7 @@ def remove_from_playlist(self, playlist, song):
893881
playlist = self.get_playlist(ID=playlist)
894882
if isinstance(song, (int, str)):
895883
song = self.query(tables.DjmdSongPlaylist).filter_by(ID=song).one()
896-
logger.info(
897-
"Removing song with ID=%s from playlist with ID=%s", song.ID, playlist.ID
898-
)
884+
logger.info("Removing song with ID=%s from playlist with ID=%s", song.ID, playlist.ID)
899885
now = datetime.datetime.now()
900886
# Remove track from playlist
901887
track_no = song.TrackNo
@@ -966,11 +952,7 @@ def move_song_in_playlist(self, playlist, song, new_track_no):
966952
playlist = self.get_playlist(ID=playlist)
967953
if isinstance(song, (int, str)):
968954
song = self.query(tables.DjmdSongPlaylist).filter_by(ID=song).one()
969-
nsongs = (
970-
self.query(tables.DjmdSongPlaylist)
971-
.filter_by(PlaylistID=playlist.ID)
972-
.count()
973-
)
955+
nsongs = self.query(tables.DjmdSongPlaylist).filter_by(PlaylistID=playlist.ID).count()
974956
if new_track_no < 1:
975957
raise ValueError("Track number must be greater than 0")
976958
if new_track_no > nsongs + 1:
@@ -1020,9 +1002,7 @@ def move_song_in_playlist(self, playlist, song, new_track_no):
10201002
self.registry.enable_tracking()
10211003
self.registry.on_move(moved)
10221004

1023-
def _create_playlist(
1024-
self, name, seq, image_path, parent, smart_list=None, attribute=None
1025-
):
1005+
def _create_playlist(self, name, seq, image_path, parent, smart_list=None, attribute=None):
10261006
"""Creates a new playlist object."""
10271007
table = tables.DjmdPlaylist
10281008
id_ = str(self.generate_unused_id(table, is_28_bit=True))
@@ -1047,9 +1027,7 @@ def _create_playlist(
10471027
else:
10481028
# Check if parent exists and is a folder
10491029
parent_id = parent
1050-
query = self.query(table.ID).filter(
1051-
table.ID == parent_id, table.Attribute == 1
1052-
)
1030+
query = self.query(table.ID).filter(table.ID == parent_id, table.Attribute == 1)
10531031
if not self.query(query.exists()).scalar():
10541032
raise ValueError("Parent does not exist or is not a folder")
10551033

@@ -1108,9 +1086,7 @@ def _create_playlist(
11081086

11091087
# Update masterPlaylists6.xml
11101088
if self.playlist_xml is not None:
1111-
self.playlist_xml.add(
1112-
id_, parent_id, attribute, now, lib_type=0, check_type=0
1113-
)
1089+
self.playlist_xml.add(id_, parent_id, attribute, now, lib_type=0, check_type=0)
11141090

11151091
return playlist
11161092

@@ -1158,9 +1134,7 @@ def create_playlist(self, name, parent=None, seq=None, image_path=None):
11581134
'123456'
11591135
"""
11601136
logger.info("Creating playlist %s", name)
1161-
return self._create_playlist(
1162-
name, seq, image_path, parent, attribute=PlaylistType.PLAYLIST
1163-
)
1137+
return self._create_playlist(name, seq, image_path, parent, attribute=PlaylistType.PLAYLIST)
11641138

11651139
def create_playlist_folder(self, name, parent=None, seq=None, image_path=None):
11661140
"""Creates a new playlist folder in the database.
@@ -1200,9 +1174,7 @@ def create_playlist_folder(self, name, parent=None, seq=None, image_path=None):
12001174
'123456'
12011175
"""
12021176
logger.info("Creating playlist folder %s", name)
1203-
return self._create_playlist(
1204-
name, seq, image_path, parent, attribute=PlaylistType.FOLDER
1205-
)
1177+
return self._create_playlist(name, seq, image_path, parent, attribute=PlaylistType.FOLDER)
12061178

12071179
def create_smart_playlist(
12081180
self, name, smart_list: SmartList, parent=None, seq=None, image_path=None
@@ -1277,9 +1249,7 @@ def delete_playlist(self, playlist):
12771249
playlist = self.get_playlist(ID=playlist)
12781250

12791251
if playlist.Attribute == 1:
1280-
logger.info(
1281-
"Deleting playlist folder '%s' with ID=%s", playlist.Name, playlist.ID
1282-
)
1252+
logger.info("Deleting playlist folder '%s' with ID=%s", playlist.Name, playlist.ID)
12831253
else:
12841254
logger.info("Deleting playlist '%s' with ID=%s", playlist.Name, playlist.ID)
12851255

@@ -1392,9 +1362,7 @@ def move_playlist(self, playlist, parent=None, seq=None):
13921362
else:
13931363
# Check if parent exists and is a folder
13941364
parent_id = str(parent)
1395-
query = self.query(table.ID).filter(
1396-
table.ID == parent_id, table.Attribute == 1
1397-
)
1365+
query = self.query(table.ID).filter(table.ID == parent_id, table.Attribute == 1)
13981366
if not self.query(query.exists()).scalar():
13991367
raise ValueError("Parent does not exist or is not a folder")
14001368

@@ -1415,9 +1383,7 @@ def move_playlist(self, playlist, parent=None, seq=None):
14151383
if seq < 1:
14161384
raise ValueError("Sequence number must be greater than 0")
14171385
elif seq > n + 1:
1418-
raise ValueError(
1419-
f"Sequence number too high, parent contains {n} items"
1420-
)
1386+
raise ValueError(f"Sequence number too high, parent contains {n} items")
14211387

14221388
if not insert_at_end:
14231389
# Get all playlists with seq between old_seq and seq
@@ -1551,9 +1517,7 @@ def rename_playlist(self, playlist, name):
15511517
with self.registry.disabled():
15521518
playlist.updated_at = now
15531519

1554-
def add_album(
1555-
self, name, artist=None, image_path=None, compilation=None, search_str=None
1556-
):
1520+
def add_album(self, name, artist=None, image_path=None, compilation=None, search_str=None):
15571521
"""Adds a new album to the database.
15581522
15591523
Parameters
@@ -1685,9 +1649,7 @@ def add_artist(self, name, search_str=None):
16851649

16861650
id_ = self.generate_unused_id(tables.DjmdArtist)
16871651
uuid = str(uuid4())
1688-
artist = tables.DjmdArtist.create(
1689-
ID=id_, Name=name, SearchStr=search_str, UUID=uuid
1690-
)
1652+
artist = tables.DjmdArtist.create(ID=id_, Name=name, SearchStr=search_str, UUID=uuid)
16911653
self.add(artist)
16921654
self.flush()
16931655
return artist
@@ -1829,9 +1791,7 @@ def add_content(self, path, **kwargs):
18291791
raise ValueError(f"Track with path '{path}' already exists in database")
18301792

18311793
id_ = self.generate_unused_id(tables.DjmdContent)
1832-
file_id = self.generate_unused_id(
1833-
tables.DjmdContent, id_field_name="rb_file_id"
1834-
)
1794+
file_id = self.generate_unused_id(tables.DjmdContent, id_field_name="rb_file_id")
18351795
uuid = str(uuid4())
18361796
content_link = self.get_menu_items(Name="TRACK").one()
18371797
date_created = datetime.date.today()
@@ -1988,9 +1948,7 @@ def read_anlz_file(self, content, type_):
19881948
return AnlzFile.parse_file(path)
19891949
return None
19901950

1991-
def update_content_path(
1992-
self, content, path, save=True, check_path=True, commit=True
1993-
):
1951+
def update_content_path(self, content, path, save=True, check_path=True, commit=True):
19941952
"""Update the file path of a track in the Rekordbox v6 database.
19951953
19961954
This changes the `FolderPath` entry in the ``DjmdContent`` table and the
@@ -2081,9 +2039,7 @@ def update_content_path(
20812039
logger.debug("Committing changes to the database")
20822040
self.commit()
20832041

2084-
def update_content_filename(
2085-
self, content, name, save=True, check_path=True, commit=True
2086-
):
2042+
def update_content_filename(self, content, name, save=True, check_path=True, commit=True):
20872043
"""Update the file name of a track in the Rekordbox v6 database.
20882044
20892045
This changes the `FolderPath` entry in the ``DjmdContent`` table and the

pyrekordbox/db6/smartlist.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,7 @@ class Condition:
179179
def __post_init__(self):
180180
if self.property not in PROPERTIES:
181181
raise ValueError(
182-
f"Invalid property: '{self.property}'! "
183-
f"Supported properties: {PROPERTIES}"
182+
f"Invalid property: '{self.property}'! Supported properties: {PROPERTIES}"
184183
)
185184

186185
valid_ops = VALID_OPS[self.property]
@@ -232,9 +231,7 @@ def _get_condition_values(cond):
232231
class SmartList:
233232
"""Rekordbox smart playlist XML handler."""
234233

235-
def __init__(
236-
self, logical_operator: int = LogicalOperator.ALL, auto_update: int = 0
237-
):
234+
def __init__(self, logical_operator: int = LogicalOperator.ALL, auto_update: int = 0):
238235
self.playlist_id: Union[int, str] = ""
239236
self.logical_operator: int = int(logical_operator)
240237
self.auto_update: int = auto_update

0 commit comments

Comments
 (0)