Rename trackdb -> tagdb

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-07-26 11:15:15 -04:00
parent 7a41c3b1a1
commit f78402f258
30 changed files with 245 additions and 245 deletions

View File

@ -1,7 +1,7 @@
# Copyright 2021 (c) Anna Schumaker.
from lib import settings
from gi.repository import Gtk
import trackdb
import tagdb
class Button(Gtk.MenuButton):
def __init__(self):
@ -13,7 +13,7 @@ class Button(Gtk.MenuButton):
self.pause = Gtk.Image.new_from_icon_name("media-playback-start")
self.counter = Gtk.Scale()
self.counter.set_adjustment(trackdb.Stack.Counter)
self.counter.set_adjustment(tagdb.Stack.Counter)
self.counter.connect("value-changed", self.on_counter_changed)
self.counter.set_format_value_func(self.format_counter)
self.counter.set_digits(0)

View File

@ -6,7 +6,7 @@ from . import seeker
from lib import publisher
from lib import settings
from gi.repository import Gst, GLib
import trackdb
import tagdb
class Player:
def __init__(self):
@ -36,7 +36,7 @@ class Player:
GLib.timeout_add(250, self.update_progress)
self.TrackChanged = publisher.Publisher()
self.track = trackdb.Tracks[settings.get_int("audio.trackid")]
self.track = tagdb.Tracks[settings.get_int("audio.trackid")]
self.load_set_state(self.track, Gst.State.PAUSED)
if self.track:
self.track.add_to_playlist("Previous")
@ -72,7 +72,7 @@ class Player:
if duration > 0 and (self.runtime() / duration) > (2 / 3):
self.track.played()
(track, cont) = trackdb.Stack.next()
(track, cont) = tagdb.Stack.next()
state = Gst.State.PLAYING if cont else Gst.State.PAUSED
self.load_set_state(track, state)
@ -111,7 +111,7 @@ class Player:
return pos if res == True else 0
def previous(self, *args):
self.play_track(trackdb.Stack.previous())
self.play_track(tagdb.Stack.previous())
def runtime(self):
if self.playbin.clock == None:

View File

@ -2,7 +2,7 @@
from . import menu
from lib import settings
from gi.repository import Gtk
import trackdb
import tagdb
import unittest
class TestAudioMenu(unittest.TestCase):
@ -41,7 +41,7 @@ class TestAudioMenu(unittest.TestCase):
self.assertEqual(button.pause.get_icon_name(), "media-playback-start")
self.assertEqual(button.count.get_text(), " ")
self.assertEqual(button.count.get_yalign(), 0)
self.assertEqual(button.counter.get_adjustment(), trackdb.Stack.Counter)
self.assertEqual(button.counter.get_adjustment(), tagdb.Stack.Counter)
self.assertEqual(button.counter.get_digits(), 0)
self.assertTrue(button.counter.get_draw_value())
@ -57,11 +57,11 @@ class TestAudioMenu(unittest.TestCase):
self.assertEqual(button.format_counter(button.counter, 1), "Next Track")
self.assertEqual(button.format_counter(button.counter, 2), "2 Tracks")
trackdb.Stack.Counter.increment()
tagdb.Stack.Counter.increment()
self.assertEqual(button.pause.get_icon_name(), "media-playback-pause")
self.assertEqual(button.count.get_text(), "0")
trackdb.Stack.Counter.decrement()
tagdb.Stack.Counter.decrement()
self.assertEqual(button.pause.get_icon_name(), "media-playback-start")
self.assertEqual(button.count.get_text(), " ")

View File

@ -8,7 +8,7 @@ from lib import publisher
from lib import settings
from gi.repository import Gst
import pathlib
import trackdb
import tagdb
import unittest
test_album = pathlib.Path("./data/Test Album/")
@ -17,18 +17,18 @@ test_track = test_album / "01 - Test Track.ogg"
class TestPlayer(unittest.TestCase):
def setUpClass():
trackdb.reset()
lib = trackdb.Library.add(test_album)
tagdb.reset()
lib = tagdb.Library.add(test_album)
lib.scan().join()
def setUp(self):
self.changed = None
settings.reset()
self.library = trackdb.Library.store[test_album]
self.library = tagdb.Library.store[test_album]
self.track = [ t for t in self.library.tracks if t.tracknumber == 1 ][0]
def tearDownClass():
trackdb.reset()
tagdb.reset()
def on_track_changed(self, prev, new):
self.changed = (prev, new)
@ -63,10 +63,10 @@ class TestPlayer(unittest.TestCase):
self.assertEqual(self.changed, (None, self.track) )
self.assertFalse(play.play_track(self.track))
trackdb.tags.User["Previous"].tracks.clear()
tagdb.tags.User["Previous"].tracks.clear()
play2 = player.Player()
self.assertEqual(play2.track, self.track)
self.assertIn(self.track, trackdb.tags.User["Previous"].tracks)
self.assertIn(self.track, tagdb.tags.User["Previous"].tracks)
def test_player_play_pause(self):
play = player.Player()
@ -90,12 +90,12 @@ class TestPlayer(unittest.TestCase):
play.next()
self.assertEqual(play.track.trackid, 0)
self.assertEqual(self.changed, (None, trackdb.Tracks[0]) )
self.assertEqual(self.changed, (None, tagdb.Tracks[0]) )
play.next()
self.assertEqual(play.track.trackid, 1)
self.assertEqual(self.changed, (trackdb.Tracks[0], trackdb.Tracks[1]) )
self.assertEqual(self.changed, (tagdb.Tracks[0], tagdb.Tracks[1]) )
play.previous()
self.assertEqual(play.track.trackid, 0)
self.assertEqual(self.changed, (trackdb.Tracks[1], trackdb.Tracks[0]) )
self.assertEqual(self.changed, (tagdb.Tracks[1], tagdb.Tracks[0]) )

View File

@ -5,9 +5,9 @@ gi.require_version('Gtk', '4.0')
gi.require_version('Gst', '1.0')
import lib
import trackdb
import tagdb
lib.settings.load()
trackdb.load()
tagdb.load()
import ui
ui.Application.run()

View File

@ -5,7 +5,7 @@ from . import model
from . import runtime
from gi.repository import Gtk
import audio
import trackdb
import tagdb
Model = model.TagModel()
@ -24,7 +24,7 @@ def on_row_activate(view, position):
track = FilterModel.get_item(position)
if audio.Player.play_track(track) == True:
Model.tag.track_selected(track)
trackdb.save()
tagdb.save()
View = Gtk.ColumnView()
View.connect("activate", on_row_activate)

View File

@ -2,7 +2,7 @@
from . import filter
from . import popover
from gi.repository import Gtk
import trackdb
import tagdb
class Controls(Gtk.Box):
def __init__(self):
@ -50,11 +50,11 @@ class Controls(Gtk.Box):
def random_toggled(self, toggle):
self.tag.random = toggle.get_active()
trackdb.save()
tagdb.save()
def loop_toggled(self, toggle):
self.tag.loop = toggle.get_active()
trackdb.save()
tagdb.save()
def search_changed(self, search):
try:

View File

@ -1,6 +1,6 @@
# Copyright 2021 (c) Anna Schumaker.
from gi.repository import Gtk, Gio, GObject
import trackdb
import tagdb
Exclude = [ "Collection", "New Tracks", "Previous" ]
Icons = { "Favorites" : "emblem-favorites",
@ -32,7 +32,7 @@ class AddPopover(Gtk.Popover):
self.listbox.connect("row-activated", self.row_activated)
self.box.append(self.listbox)
for tag in trackdb.tags.User.tags():
for tag in tagdb.tags.User.tags():
if tag.name not in Exclude:
self.user_added(tag)
@ -42,8 +42,8 @@ class AddPopover(Gtk.Popover):
self.entry.connect("activate", self.entry_activate)
self.box.append(self.entry)
trackdb.tags.User.Added.register(self.user_added)
trackdb.tags.User.Removed.register(self.user_removed)
tagdb.tags.User.Added.register(self.user_added)
tagdb.tags.User.Removed.register(self.user_removed)
self.set_child(self.box)
def do_add_selected(self, tag):
@ -55,14 +55,14 @@ class AddPopover(Gtk.Popover):
track = FilterModel.get_item(i)
track.add_to_playlist(tag.name)
trackdb.save()
tagdb.save()
self.popdown()
def row_activated(self, listbox, row):
self.do_add_selected(row.tag)
def entry_activate(self, entry):
tag = trackdb.tags.User.add(entry.get_text())
tag = tagdb.tags.User.add(entry.get_text())
self.do_add_selected(tag)
entry.set_text("")
@ -77,7 +77,7 @@ class AddPopover(Gtk.Popover):
self.listbox.append(AddPopoverRow(tag))
def user_removed(self, tag):
for i in range(len(trackdb.tags.User)):
for i in range(len(tagdb.tags.User)):
row = self.listbox.get_row_at_index(i)
if row is not None and row.tag == tag:
self.listbox.remove(row)

View File

@ -3,7 +3,7 @@ from . import controls
from . import filter
from . import popover
from gi.repository import Gtk
import trackdb
import tagdb
import unittest
class TestPlaylistControls(unittest.TestCase):
@ -35,8 +35,8 @@ class TestPlaylistControls(unittest.TestCase):
def test_playlist_controls_set_tag(self):
ctrl = controls.Controls()
fav = trackdb.tags.User["Favorites"]
prev = trackdb.tags.User["Previous"]
fav = tagdb.tags.User["Favorites"]
prev = tagdb.tags.User["Previous"]
self.assertIsNone(ctrl.tag)
self.assertFalse(ctrl.random.get_sensitive())

View File

@ -1,12 +1,12 @@
# Copyright 2021 (c) Anna Schumaker.
from . import popover
from gi.repository import Gtk
import trackdb
import tagdb
import unittest
class TestAddPopover(unittest.TestCase):
def setUp(self):
trackdb.reset()
tagdb.reset()
def test_add_popover_init(self):
pop = popover.AddPopover()
@ -25,7 +25,7 @@ class TestAddPopover(unittest.TestCase):
self.assertIn(pop.entry, pop.box)
def test_add_popover_row(self):
tag = trackdb.tags.User["Favorites"]
tag = tagdb.tags.User["Favorites"]
row = popover.AddPopoverRow(tag)
self.assertEqual(popover.Exclude,
@ -48,7 +48,7 @@ class TestAddPopover(unittest.TestCase):
def test_add_popover_list(self):
pop = popover.AddPopover()
user = trackdb.tags.User
user = tagdb.tags.User
self.assertEqual(pop.listbox.get_row_at_index(0).tag, user["Favorites"])
self.assertEqual(pop.listbox.get_row_at_index(1).tag, user["Up Next"])
@ -70,7 +70,7 @@ class TestAddPopover(unittest.TestCase):
pop.entry.set_text("Test")
pop.entry_activate(pop.entry)
tag = trackdb.tags.User["Test"]
tag = tagdb.tags.User["Test"]
self.assertIsNotNone(tag)
self.assertEqual(pop.entry.get_text(), "")

View File

@ -6,7 +6,7 @@ from . import user
from lib import settings
from gi.repository import Gtk
import audio
import trackdb
import tagdb
Switcher = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0)
Stack = Gtk.Stack()
@ -34,7 +34,7 @@ def switch_page(toggle):
def on_tag_push_pop(old, new):
old.widgets.set_label()
new.widgets.set_label()
trackdb.Stack.PushPop.register(on_tag_push_pop)
tagdb.Stack.PushPop.register(on_tag_push_pop)
def add_stack_page(name, page):
toggle = Gtk.ToggleButton()
@ -51,11 +51,11 @@ def add_stack_page(name, page):
toggle.set_active(settings.get("sidebar.page") == name)
add_stack_page("Playlists", user.TagBox)
add_stack_page("Artists", tagbox.ParentTagBox(trackdb.tags.Artist, "avatar-default-symbolic",
trackdb.tags.Album, "media-optical", header=True))
add_stack_page("Genres", tagbox.TagBox(trackdb.tags.Genre, "emblem-generic", header=True))
add_stack_page("Decades", tagbox.ParentTagBox(trackdb.tags.Decade, "x-office-calendar",
trackdb.tags.Year, "x-office-calendar-symbolic"))
add_stack_page("Artists", tagbox.ParentTagBox(tagdb.tags.Artist, "avatar-default-symbolic",
tagdb.tags.Album, "media-optical", header=True))
add_stack_page("Genres", tagbox.TagBox(tagdb.tags.Genre, "emblem-generic", header=True))
add_stack_page("Decades", tagbox.ParentTagBox(tagdb.tags.Decade, "x-office-calendar",
tagdb.tags.Year, "x-office-calendar-symbolic"))
add_stack_page("Libraries", library.Box)

View File

@ -3,7 +3,7 @@ from . import tagbox
from . import tagrow
from gi.repository import Gtk
import pathlib
import trackdb
import tagdb
class LibraryTagRow(tagrow.TagRow):
@ -28,13 +28,13 @@ class LibraryTagRow(tagrow.TagRow):
self.tag.scan()
def remove_clicked(self, button):
trackdb.Library.remove(self.tag)
tagdb.Library.remove(self.tag)
class LibraryTagBox(tagbox.TagBox):
def __alloc_tagrow__(self, tag):
return LibraryTagRow(tag, self.icon)
TagBox = LibraryTagBox(trackdb.Library, "folder-music")
TagBox = LibraryTagBox(tagdb.Library, "folder-music")
#
@ -55,7 +55,7 @@ def selected_path():
def on_select(button):
if (path := selected_path()) != None:
trackdb.Library.add(path).scan()
tagdb.Library.add(path).scan()
Popover.popdown()
DirSelect = Gtk.Button.new_with_label("Select Folder")

View File

@ -3,7 +3,7 @@ from . import tagrow
from gi.repository import Gtk
import lib
import playlist
import trackdb
import tagdb
class TagBox(Gtk.ScrolledWindow):
def __init__(self, tagstore, icon, header=False):
@ -48,7 +48,7 @@ class TagBox(Gtk.ScrolledWindow):
cur.set_header(None)
def row_activated(self, listbox, row):
trackdb.Stack.push(row.tag)
tagdb.Stack.push(row.tag)
def row_selected(self, listbox, row):
playlist.Model.switch_tag(row.tag)

View File

@ -1,6 +1,6 @@
# Copyright 2021 (c) Anna Schumaker.
from gi.repository import Gtk, GLib, Pango
import trackdb
import tagdb
class TagRow(Gtk.ListBoxRow):
def __init__(self, tag, icon):
@ -24,7 +24,7 @@ class TagRow(Gtk.ListBoxRow):
def set_label(self):
count = len(self.tag)
bold = trackdb.Stack.current() == self.tag
bold = tagdb.Stack.current() == self.tag
text = f"{self.tag.name}\n{count} Track{'s' if count != 1 else ''}"
self.label.set_markup(("<b>%s</b>" if bold else "%s") %
GLib.markup_escape_text(text))

View File

@ -3,7 +3,7 @@ from . import library
from . import tagbox
from gi.repository import Gtk, Gio, GLib
import pathlib
import trackdb
import tagdb
import unittest
main_context = GLib.main_context_default()
@ -12,7 +12,7 @@ test_artist1 = test_library / "Test Artist 01"
class TestLibrarySidebar(unittest.TestCase):
def tearDown(self):
trackdb.reset()
tagdb.reset()
library.TagBox.clear()
def test_library_sidebar_init(self):
@ -28,8 +28,8 @@ class TestLibrarySidebar(unittest.TestCase):
self.assertIn(library.Add, library.Box)
def test_library_sidebar_row(self):
library.TagBox = library.LibraryTagBox(trackdb.Library, "folder-music")
lib_tag = trackdb.Library.add(test_artist1)
library.TagBox = library.LibraryTagBox(tagdb.Library, "folder-music")
lib_tag = tagdb.Library.add(test_artist1)
lib_tag.scan().join()
library.TagBox.bus.complete()
@ -95,5 +95,5 @@ class TestLibrarySidebar(unittest.TestCase):
library.on_select(library.DirSelect)
self.assertFalse(library.Popover.is_visible())
self.assertIn(test_artist1, trackdb.Library.store)
trackdb.Library[test_artist1].scan.join()
self.assertIn(test_artist1, tagdb.Library.store)
tagdb.Library[test_artist1].scan.join()

View File

@ -3,7 +3,7 @@ from . import tagbox
from . import tagrow
from . import user
from gi.repository import Gtk
import trackdb
import tagdb
import unittest
Expected = [ ("Collection", "media-playback-start", tagrow.TagRow),
@ -25,7 +25,7 @@ class TestUserSidebar(unittest.TestCase):
self.assertEqual(user.Icons["Up Next"], "edit-redo")
def test_user_sidebar_row(self):
tag = trackdb.tags.User.add("Test")
tag = tagdb.tags.User.add("Test")
row = user.UserTagRow(tag, "audio-x-generic")
self.assertIsInstance(row.remove, Gtk.Button)
@ -34,14 +34,14 @@ class TestUserSidebar(unittest.TestCase):
self.assertIn(row.remove, row.grid)
row.remove_tag(row.remove)
self.assertIsNone(trackdb.tags.User["Test"])
self.assertIsNone(tagdb.tags.User["Test"])
def test_user_sidebar(self):
user.TagBox = user.UserTagBox(trackdb.tags.User, "audio-x-generic")
tag = trackdb.tags.User.add("Test")
user.TagBox = user.UserTagBox(tagdb.tags.User, "audio-x-generic")
tag = tagdb.tags.User.add("Test")
user.TagBox.bus.complete()
for (i, (tag, icon, type)) in enumerate(Expected):
self.assertIsInstance(user.TagBox[i], type)
self.assertEqual(user.TagBox[i].tag, trackdb.tags.User[tag])
self.assertEqual(user.TagBox[i].tag, tagdb.tags.User[tag])
self.assertEqual(user.TagBox[i].image.get_icon_name(), icon)

View File

@ -2,7 +2,7 @@
from . import tagbox
from . import tagrow
from gi.repository import Gtk, Gdk
import trackdb
import tagdb
Icons = { "Collection" : "media-playback-start",
"Favorites" : "emblem-favorites",
@ -24,10 +24,10 @@ class UserTagRow(tagrow.TagRow):
def on_key_released(self, controller, keyval, keycode, state):
if Gdk.keyval_name(keyval) == "Delete":
trackdb.tags.User.remove(self.tag)
tagdb.tags.User.remove(self.tag)
def remove_tag(self, button):
trackdb.tags.User.remove(self.tag)
tagdb.tags.User.remove(self.tag)
class UserTagBox(tagbox.TagBox):
@ -37,4 +37,4 @@ class UserTagBox(tagbox.TagBox):
return tagrow.TagRow(tag, Icons.get(tag.name, self.icon))
TagBox = UserTagBox(trackdb.tags.User, "audio-x-generic")
TagBox = UserTagBox(tagdb.tags.User, "audio-x-generic")

View File

@ -7,7 +7,7 @@ import lib
import pathlib
import threading
File = "trackdb.pickle"
File = "tagdb.pickle"
Bus = lib.bus.Bus(500)
Tracks = allocator.TrackAllocator()
Stack = stack.TagStack()

171
tagdb/test_tagdb.py Normal file
View File

@ -0,0 +1,171 @@
# Copyright 2020 (c) Anna Schumaker.
import lib
import pathlib
import tagdb
import unittest
test_tracks = pathlib.Path("./data/Test Album")
class TestLibraryTag(unittest.TestCase):
def tearDown(self):
tagdb.reset()
def test_library_tag_init(self):
library = tagdb.LibraryTag(test_tracks)
self.assertIsInstance(library, lib.tag.Tag)
self.assertIsInstance(library.clear, lib.thread.Thread)
self.assertIsInstance(library.scan, lib.thread.Thread)
def test_library_tag_state(self):
lib = tagdb.LibraryTag(test_tracks)
lib.scan().join()
state = lib.__getstate__()
self.assertEqual(set(state.keys()),
set([ "name", "sort", "current", "loop", "random", "tracks" ]))
self.assertEqual(state["name"], test_tracks)
self.assertEqual(state["tracks"], [ i for i in range(12) ])
lib.__dict__.clear()
lib.__setstate__(state)
lib.fix_tracks()
self.assertEqual(lib.name, test_tracks)
self.assertEqual(lib.tracks, [ tagdb.Tracks[i] for i in range(12) ])
self.assertEqual(lib.clear.func, lib.__do_clear__)
self.assertEqual(lib.scan.func, lib.__do_scan__)
def test_library_tag_scan(self):
lib = tagdb.LibraryTag(test_tracks)
lib.scan().join()
for i in range(12):
self.assertEqual(lib.tracks[i], tagdb.Tracks[i])
def test_library_tag_scan_new(self):
lib = tagdb.LibraryTag(test_tracks)
lib.scan().join()
for trak in [ tagdb.Tracks[0], tagdb.Tracks[11] ]:
lib.remove_track(trak)
tagdb.Tracks.remove(trak)
lib.scan().join()
self.assertEqual(len(lib.tracks), 12)
def test_library_tag_scan_remove(self):
lib = tagdb.LibraryTag(test_tracks)
lib.scan().join()
trak = tagdb.track.Track(tagdb.Tracks.nextid,
test_tracks / "01 - Test Track.ogg", lib)
trak.path = pathlib.Path("No Such File")
lib.tracks.append(trak)
tagdb.Tracks.tracks[trak.trackid] = trak
lib.scan().join()
self.assertNotIn(trak, lib.tracks)
def test_library_tag_clear(self):
lib = tagdb.LibraryTag(test_tracks)
lib.scan().join()
self.assertEqual(len(lib), 12)
lib.clear().join()
self.assertEqual(len(lib), 0)
self.assertEqual(len(tagdb.Tracks), 0)
class TestLibraryStore(unittest.TestCase):
def test_library_store(self):
store = tagdb.LibraryStore()
lib = store.add(test_tracks)
self.assertIsInstance(lib, tagdb.LibraryTag)
lib.scan().join()
self.assertEqual(len(lib), 12)
store.remove(lib)
lib.clear.join()
self.assertEqual(len(lib), 0)
class TestTrackDB(unittest.TestCase):
def tearDown(self):
tagdb.reset()
def test_tagdb_init(self):
self.assertIsInstance(tagdb.Bus, lib.bus.Bus)
self.assertIsInstance(tagdb.Tracks, tagdb.allocator.TrackAllocator)
self.assertIsInstance(tagdb.Stack, tagdb.stack.TagStack)
self.assertIsInstance(tagdb.Library, tagdb.LibraryStore)
self.assertEqual(tagdb.File, "tagdb.pickle")
self.assertEqual(tagdb.Bus.timeout, 500)
self.assertIn(tagdb.save, tagdb.Library.Added.subscribers)
self.assertIn(tagdb.save, tagdb.Library.Removed.subscribers)
self.assertIn(tagdb.save, tagdb.Tracks.Added.subscribers)
self.assertIn(tagdb.save, tagdb.Tracks.Removed.subscribers)
self.assertIn(tagdb.save, tagdb.Tracks.Updated.subscribers)
self.assertIn(tagdb.save, tagdb.tags.User.Added.subscribers)
self.assertIn(tagdb.save, tagdb.tags.User.Removed.subscribers)
self.assertIn(tagdb.save, tagdb.Stack.PushPop.subscribers)
self.assertIn(tagdb.save, tagdb.Stack.NextTrack.subscribers)
def test_tagdb_save_load(self):
db_file = lib.data.DataFile(tagdb.File, lib.data.READ)
library = tagdb.Library.add(test_tracks)
library.scan()
tagdb.Stack.push(library)
tagdb.save()
self.assertEqual(tagdb.Bus.passengers, [ (tagdb._do_save, ()) ])
self.assertFalse(db_file.exists())
library.scan.join()
tagdb.Bus.complete()
self.assertTrue(db_file.exists())
tagdb.tags.reset()
tagdb.Library.reset()
tagdb.Tracks.reset()
tagdb.Stack.reset()
tagdb.load()
self.assertEqual(len(tagdb.Tracks), 12)
self.assertEqual(len(tagdb.Library), 1)
self.assertEqual(len(tagdb.Library[test_tracks]), 12)
self.assertEqual(len(tagdb.tags.Artist), 3)
self.assertEqual(len(tagdb.tags.Album), 12)
self.assertEqual(len(tagdb.tags.Genre), 4)
self.assertEqual(len(tagdb.tags.Decade), 2)
self.assertEqual(len(tagdb.tags.Year), 2)
self.assertEqual(tagdb.Stack.tags, [ tagdb.Library[test_tracks] ])
self.assertIn(tagdb.save, tagdb.Library.Added.subscribers)
self.assertIn(tagdb.save, tagdb.Tracks.Added.subscribers)
self.assertIn(tagdb.save, tagdb.tags.User.Added.subscribers)
def test_tagdb_stress(self):
lib = tagdb.Library.add(pathlib.Path("./trier/Test Library/"))
lib.scan().join()
tagdb.Bus.complete()
tagdb.Library.remove(lib)
lib.clear.join()
tagdb.Bus.complete()
def test_tagdb_reset(self):
tagdb.Tracks.Added.register(1)
tagdb.Tracks.Removed.register(1)
tagdb.Tracks.Updated.register(1)
tagdb.Library.Added.register(1)
tagdb.Library.Removed.register(1)
tagdb.Library.store = { "a" : 1, "b" : 2, "c" : 3 }
with lib.data.DataFile(tagdb.File, lib.data.WRITE) as f:
f.pickle([ 0, [] ])
tagdb.reset()
self.assertEqual(len(tagdb.Library), 0)
self.assertIn(tagdb.save, tagdb.Tracks.Added.subscribers)
self.assertIn(tagdb.save, tagdb.Tracks.Removed.subscribers)
self.assertIn(tagdb.save, tagdb.Tracks.Updated.subscribers)
self.assertIn(tagdb.save, tagdb.Library.Added.subscribers)
self.assertIn(tagdb.save, tagdb.Library.Removed.subscribers)
self.assertFalse(lib.data.DataFile(tagdb.File, lib.data.READ).exists())

View File

@ -1,171 +0,0 @@
# Copyright 2020 (c) Anna Schumaker.
import lib
import pathlib
import trackdb
import unittest
test_tracks = pathlib.Path("./data/Test Album")
class TestLibraryTag(unittest.TestCase):
def tearDown(self):
trackdb.reset()
def test_library_tag_init(self):
library = trackdb.LibraryTag(test_tracks)
self.assertIsInstance(library, lib.tag.Tag)
self.assertIsInstance(library.clear, lib.thread.Thread)
self.assertIsInstance(library.scan, lib.thread.Thread)
def test_library_tag_state(self):
lib = trackdb.LibraryTag(test_tracks)
lib.scan().join()
state = lib.__getstate__()
self.assertEqual(set(state.keys()),
set([ "name", "sort", "current", "loop", "random", "tracks" ]))
self.assertEqual(state["name"], test_tracks)
self.assertEqual(state["tracks"], [ i for i in range(12) ])
lib.__dict__.clear()
lib.__setstate__(state)
lib.fix_tracks()
self.assertEqual(lib.name, test_tracks)
self.assertEqual(lib.tracks, [ trackdb.Tracks[i] for i in range(12) ])
self.assertEqual(lib.clear.func, lib.__do_clear__)
self.assertEqual(lib.scan.func, lib.__do_scan__)
def test_library_tag_scan(self):
lib = trackdb.LibraryTag(test_tracks)
lib.scan().join()
for i in range(12):
self.assertEqual(lib.tracks[i], trackdb.Tracks[i])
def test_library_tag_scan_new(self):
lib = trackdb.LibraryTag(test_tracks)
lib.scan().join()
for trak in [ trackdb.Tracks[0], trackdb.Tracks[11] ]:
lib.remove_track(trak)
trackdb.Tracks.remove(trak)
lib.scan().join()
self.assertEqual(len(lib.tracks), 12)
def test_library_tag_scan_remove(self):
lib = trackdb.LibraryTag(test_tracks)
lib.scan().join()
trak = trackdb.track.Track(trackdb.Tracks.nextid,
test_tracks / "01 - Test Track.ogg", lib)
trak.path = pathlib.Path("No Such File")
lib.tracks.append(trak)
trackdb.Tracks.tracks[trak.trackid] = trak
lib.scan().join()
self.assertNotIn(trak, lib.tracks)
def test_library_tag_clear(self):
lib = trackdb.LibraryTag(test_tracks)
lib.scan().join()
self.assertEqual(len(lib), 12)
lib.clear().join()
self.assertEqual(len(lib), 0)
self.assertEqual(len(trackdb.Tracks), 0)
class TestLibraryStore(unittest.TestCase):
def test_library_store(self):
store = trackdb.LibraryStore()
lib = store.add(test_tracks)
self.assertIsInstance(lib, trackdb.LibraryTag)
lib.scan().join()
self.assertEqual(len(lib), 12)
store.remove(lib)
lib.clear.join()
self.assertEqual(len(lib), 0)
class TestTrackDB(unittest.TestCase):
def tearDown(self):
trackdb.reset()
def test_trackdb_init(self):
self.assertIsInstance(trackdb.Bus, lib.bus.Bus)
self.assertIsInstance(trackdb.Tracks, trackdb.allocator.TrackAllocator)
self.assertIsInstance(trackdb.Stack, trackdb.stack.TagStack)
self.assertIsInstance(trackdb.Library, trackdb.LibraryStore)
self.assertEqual(trackdb.File, "trackdb.pickle")
self.assertEqual(trackdb.Bus.timeout, 500)
self.assertIn(trackdb.save, trackdb.Library.Added.subscribers)
self.assertIn(trackdb.save, trackdb.Library.Removed.subscribers)
self.assertIn(trackdb.save, trackdb.Tracks.Added.subscribers)
self.assertIn(trackdb.save, trackdb.Tracks.Removed.subscribers)
self.assertIn(trackdb.save, trackdb.Tracks.Updated.subscribers)
self.assertIn(trackdb.save, trackdb.tags.User.Added.subscribers)
self.assertIn(trackdb.save, trackdb.tags.User.Removed.subscribers)
self.assertIn(trackdb.save, trackdb.Stack.PushPop.subscribers)
self.assertIn(trackdb.save, trackdb.Stack.NextTrack.subscribers)
def test_trackdb_save_load(self):
db_file = lib.data.DataFile(trackdb.File, lib.data.READ)
library = trackdb.Library.add(test_tracks)
library.scan()
trackdb.Stack.push(library)
trackdb.save()
self.assertEqual(trackdb.Bus.passengers, [ (trackdb._do_save, ()) ])
self.assertFalse(db_file.exists())
library.scan.join()
trackdb.Bus.complete()
self.assertTrue(db_file.exists())
trackdb.tags.reset()
trackdb.Library.reset()
trackdb.Tracks.reset()
trackdb.Stack.reset()
trackdb.load()
self.assertEqual(len(trackdb.Tracks), 12)
self.assertEqual(len(trackdb.Library), 1)
self.assertEqual(len(trackdb.Library[test_tracks]), 12)
self.assertEqual(len(trackdb.tags.Artist), 3)
self.assertEqual(len(trackdb.tags.Album), 12)
self.assertEqual(len(trackdb.tags.Genre), 4)
self.assertEqual(len(trackdb.tags.Decade), 2)
self.assertEqual(len(trackdb.tags.Year), 2)
self.assertEqual(trackdb.Stack.tags, [ trackdb.Library[test_tracks] ])
self.assertIn(trackdb.save, trackdb.Library.Added.subscribers)
self.assertIn(trackdb.save, trackdb.Tracks.Added.subscribers)
self.assertIn(trackdb.save, trackdb.tags.User.Added.subscribers)
def test_trackdb_stress(self):
lib = trackdb.Library.add(pathlib.Path("./trier/Test Library/"))
lib.scan().join()
trackdb.Bus.complete()
trackdb.Library.remove(lib)
lib.clear.join()
trackdb.Bus.complete()
def test_trackdb_reset(self):
trackdb.Tracks.Added.register(1)
trackdb.Tracks.Removed.register(1)
trackdb.Tracks.Updated.register(1)
trackdb.Library.Added.register(1)
trackdb.Library.Removed.register(1)
trackdb.Library.store = { "a" : 1, "b" : 2, "c" : 3 }
with lib.data.DataFile(trackdb.File, lib.data.WRITE) as f:
f.pickle([ 0, [] ])
trackdb.reset()
self.assertEqual(len(trackdb.Library), 0)
self.assertIn(trackdb.save, trackdb.Tracks.Added.subscribers)
self.assertIn(trackdb.save, trackdb.Tracks.Removed.subscribers)
self.assertIn(trackdb.save, trackdb.Tracks.Updated.subscribers)
self.assertIn(trackdb.save, trackdb.Library.Added.subscribers)
self.assertIn(trackdb.save, trackdb.Library.Removed.subscribers)
self.assertFalse(lib.data.DataFile(trackdb.File, lib.data.READ).exists())