Skip to content

Commit

Permalink
feat: new track field - audio_format
Browse files Browse the repository at this point in the history
  • Loading branch information
jtpavlock committed Oct 13, 2022
1 parent 01c7170 commit 07fce9f
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 51 deletions.
26 changes: 26 additions & 0 deletions alembic/versions/ab11c34c1d0b_new_field_audio_format.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
"""new field audio_format.
Revision ID: ab11c34c1d0b
Revises: 0ce5960a081e
Create Date: 2022-10-13 15:55:35.303129
"""
import sqlalchemy as sa

from alembic import op

# revision identifiers, used by Alembic.
revision = "ab11c34c1d0b"
down_revision = "0ce5960a081e"
branch_labels = None
depends_on = None


def upgrade():
with op.batch_alter_table("track", schema=None) as batch_op:
batch_op.add_column(sa.Column("audio_format", sa.String(), nullable=True))


def downgrade():
with op.batch_alter_table("track", schema=None) as batch_op:
batch_op.drop_column("audio_format")
2 changes: 2 additions & 0 deletions docs/fields.rst
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ Track Fields
"albumartist", "Album artist", ""
"artist", "Track artist", ""
"artists", "Set of track artists", "1"
"audio_format", "File audio_format. One of ['aac', 'aiff', 'alac', 'ape',
'asf', 'dsf', 'flac', 'ogg', 'opus', 'mp3', 'mpc', 'wav', 'wv']", ""
"disc", "Disc number", ""
"genre", "Genre", "1"
"path", "Filesystem path of the track", "3"
Expand Down
5 changes: 5 additions & 0 deletions moe/library/track.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ def read_custom_tags(

track_fields["artist"] = audio_file.artist
track_fields["artists"] = set(audio_file.artists)
track_fields["audio_format"] = audio_file.type
track_fields["disc"] = audio_file.disc
track_fields["genres"] = set(audio_file.genres)
track_fields["path"] = track_path
Expand Down Expand Up @@ -175,6 +176,8 @@ class Track(LibItem, SABase):
album_obj (Album): Corresponding Album object.
artist (str)
artists (set[str]): Set of all artists.
audio_format (str): File audio format. One of ['aac', 'aiff', 'alac', 'ape',
'asf', 'dsf', 'flac', 'ogg', 'opus', 'mp3', 'mpc', 'wav', 'wv']
disc (int): Disc number the track is on.
genre (str): String of all genres concatenated with ';'.
genres (set[str]): Set of all genres.
Expand All @@ -191,6 +194,7 @@ class Track(LibItem, SABase):

_id: int = cast(int, Column(Integer, primary_key=True))
artist: str = cast(str, Column(String, nullable=False))
audio_format: str = cast(str, Column(String, nullable=True))
disc: int = cast(int, Column(Integer, nullable=False, default=1))
path: Path = cast(Path, Column(PathType, nullable=False, unique=True))
title: str = cast(str, Column(String, nullable=False))
Expand Down Expand Up @@ -354,6 +358,7 @@ def fields(self) -> set[str]:
"album_obj",
"artist",
"artists",
"audio_format",
"disc",
"genres",
"path",
Expand Down
1 change: 1 addition & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,7 @@ def track_factory(
title=title,
track_num=track_num,
disc=disc,
audio_format=kwargs.pop("audio_format", "mp3"),
**kwargs,
)

Expand Down
51 changes: 0 additions & 51 deletions tests/library/test_track.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
"""Tests a Track object."""

import datetime

import pytest

import moe
import moe.plugins.write as moe_write
from moe.config import ExtraPlugin
from moe.library import Track, TrackError
from moe.plugins.write import write_tags
from tests.conftest import album_factory, extra_factory, track_factory


Expand Down Expand Up @@ -111,54 +108,6 @@ def test_album_set(self, tmp_path):
class TestFromFile:
"""Test initialization from given file path."""

def test_read_tags(self, tmp_config):
"""We can initialize a track with tags from a file if present."""
tmp_config()
track = track_factory(exists=True)
album = track.album_obj

track.album = "The Lost Album"
track.albumartist = "Wu-Tang Clan"
track.artist = "Wu-Tang Clan"
track.artists = {"Wu-Tang Clan", "Me"}
track.disc = 1
track.genres = {"hip hop", "rock"}
track.title = "Full"
track.track_num = 1

album.barcode = "1234"
album.catalog_nums = {"1", "2"}
album.country = "US"
album.date = datetime.date(2020, 1, 12)
album.disc_total = 2
album.label = "RCA"
album.media = "CD"
album.original_date = datetime.date(2020, 1, 1)
album.track_total = 10
write_tags(track)

new_track = Track.from_file(track.path)
new_album = new_track.album_obj

assert new_track.album == track.album
assert new_track.albumartist == track.albumartist
assert new_track.artist == track.artist
assert new_track.artists == track.artists
assert new_track.disc == track.disc
assert new_track.genres == track.genres
assert new_track.title == track.title
assert new_track.track_num == track.track_num

assert new_album.barcode == album.barcode
assert new_album.catalog_nums == album.catalog_nums
assert new_album.country == album.country
assert new_album.disc_total == album.disc_total
assert new_album.date == album.date
assert new_album.label == album.label
assert new_album.media == album.media
assert new_album.original_date == album.original_date
assert new_album.track_total == album.track_total

def test_non_track_file(self):
"""Raise `TrackError` if the given path does not correspond to a track file."""
with pytest.raises(TrackError):
Expand Down
1 change: 1 addition & 0 deletions tests/plugins/test_write.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ def test_write_tags(self, tmp_config):
assert new_track.albumartist == albumartist
assert new_track.artist == artist
assert new_track.artists == artists
assert new_track.audio_format == "mp3"
assert new_track.disc == disc
assert new_track.genres == genres
assert new_track.title == title
Expand Down

0 comments on commit 07fce9f

Please sign in to comment.