Skip to content

Commit

Permalink
internal: normalize track delimiter in tracks.py
Browse files Browse the repository at this point in the history
  • Loading branch information
snejus committed Mar 16, 2024
1 parent 6a7429d commit ab77f71
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 10 deletions.
8 changes: 3 additions & 5 deletions beetsplug/bandcamp/track.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ class Track:
track_alt: Optional[str] = None

@classmethod
def from_json(cls, json: JSONDict, delim: str, label: str) -> "Track":
def from_json(cls, json: JSONDict, label: str) -> "Track":
try:
artist = json["inAlbum"]["byArtist"]["name"]
except KeyError:
Expand All @@ -81,7 +81,7 @@ def from_json(cls, json: JSONDict, delim: str, label: str) -> "Track":
"index": json.get("position"),
"catalognum": json.get("catalognum"),
}
return cls(**cls.parse_name(data, json["name"], delim, label))
return cls(**cls.parse_name(data, json["name"], label))

@staticmethod
def clean_digi_name(name: str) -> Tuple[str, bool]:
Expand Down Expand Up @@ -113,9 +113,7 @@ def find_featuring(data: JSONDict) -> JSONDict:
return data

@staticmethod
def parse_name(data: JSONDict, name: str, delim: str, label: str) -> JSONDict:
name = name.replace(f" {delim} ", " - ")

def parse_name(data: JSONDict, name: str, label: str) -> JSONDict:
# remove label from the end of the track name
# see https://gutterfunkuk.bandcamp.com/album/gutterfunk-all-subject-to-vibes-various-artists-lp # noqa
if name.endswith(label):
Expand Down
15 changes: 11 additions & 4 deletions beetsplug/bandcamp/tracks.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
"""Module with tracks parsing functionality."""

import itertools as it
import operator as op
import re
Expand Down Expand Up @@ -40,7 +41,7 @@ def remove_number_prefix(names: List[str]) -> List[str]:
return names

@staticmethod
def track_delimiter(names: List[str]) -> str:
def find_common_track_delimiter(names: List[str]) -> str:
"""Return the track parts delimiter that is in effect in the current release.
In some (rare) situations track parts are delimited by a pipe character
or some UTF-8 equivalent of a dash.
Expand Down Expand Up @@ -98,6 +99,13 @@ def common_name_parts(tracks, names):

return tracks

@classmethod
def normalize_delimiter(cls, names: List[str]) -> List[str]:
delim = cls.find_common_track_delimiter(names)
return (
names if delim == "-" else [n.replace(f" {delim} ", " - ") for n in names]
)

@classmethod
def from_json(cls, meta: JSONDict) -> "Tracks":
try:
Expand All @@ -108,13 +116,12 @@ def from_json(cls, meta: JSONDict) -> "Tracks":
names = [i.get("name", "") for i in tracks]
names = cls.split_quoted_titles(names)
names = cls.remove_number_prefix(names)
names = cls.normalize_delimiter(names)
for track, name in zip(tracks, names):
track["name"] = name

tracks = cls.common_name_parts(tracks, names)

delim = cls.track_delimiter(names)
return cls([Track.from_json(t, delim, Helpers.get_label(meta)) for t in tracks])
return cls([Track.from_json(t, Helpers.get_label(meta)) for t in tracks])

@cached_property
def first(self) -> Track:
Expand Down
2 changes: 1 addition & 1 deletion tests/test_track.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def test_parse_catalognum_from_track_name(
"catalognum": initial_catalognum,
}

track = Track.from_json(json_track, "-", "Label")
track = Track.from_json(json_track, "Label")
assert track.title == expected_title, print(track)
assert track.catalognum == expected_catalognum, print(track)

Expand Down

0 comments on commit ab77f71

Please sign in to comment.