From 7b1fac0bfb9bce9105922d353bc6998b131a275b Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Mon, 11 Mar 2019 11:01:49 -0400 Subject: [PATCH] curds: Create a playlist manager class This replaces the code in playlist/__init__.py and turns it into a class. This should make things easier to handle during testing, since we can easily tear down the old instance and create a new one. Signed-off-by: Anna Schumaker --- curds/playlist/__init__.py | 12 +----------- curds/playlist/manager.py | 15 ++++++++++++++ curds/playlist/test_manager.py | 36 ++++++++++++++++++++++++++++++++++ curds/test_playlist.py | 34 -------------------------------- 4 files changed, 52 insertions(+), 45 deletions(-) create mode 100644 curds/playlist/manager.py create mode 100644 curds/playlist/test_manager.py delete mode 100644 curds/test_playlist.py diff --git a/curds/playlist/__init__.py b/curds/playlist/__init__.py index 96391a5..120a061 100644 --- a/curds/playlist/__init__.py +++ b/curds/playlist/__init__.py @@ -1,12 +1,2 @@ # Copyright 2019 (c) Anna Schumaker. -from . import library -import os - -plist_map = {"Library" : dict()} - -def lookup_library(path): - path = os.path.abspath(path) - plist = plist_map["Library"].get(path, None) - if plist != None: - return plist - return plist_map["Library"].setdefault(path, library.LibraryPlaylist(path)) +from . import playlist diff --git a/curds/playlist/manager.py b/curds/playlist/manager.py new file mode 100644 index 0000000..8422c9f --- /dev/null +++ b/curds/playlist/manager.py @@ -0,0 +1,15 @@ +# Copyright 2019 (c) Anna Schumaker. +from . import library +import os + +class LibraryManager(dict): + def __getitem__(self, key): + key = os.path.abspath(key) + if not key in self.keys(): + self[key] = library.LibraryPlaylist(key) + return self.get(key) + + +class PlaylistManager(dict): + def __init__(self): + self["Library"] = LibraryManager() diff --git a/curds/playlist/test_manager.py b/curds/playlist/test_manager.py new file mode 100644 index 0000000..92ad7d4 --- /dev/null +++ b/curds/playlist/test_manager.py @@ -0,0 +1,36 @@ +# Copyright 2019 (c) Anna Schumaker. +from . import library +from . import manager +from .. import threadqueue +import os +import unittest + +test_album = os.path.abspath("./trier/Test Album") +test_library = os.path.abspath("./trier/Test Library") + +class TestPlaylistManager(unittest.TestCase): + def setUp(self): + if not library.library_thread.is_alive(): + library.library_thread = threadqueue.ThreadQueue() + + def test_manager_init(self): + playman = manager.PlaylistManager() + self.assertIsInstance(playman, manager.PlaylistManager) + self.assertIsInstance(playman, dict) + self.assertIsInstance(playman["Library"], manager.LibraryManager) + self.assertIsInstance(playman["Library"], dict) + + def test_manager_library(self): + playman = manager.PlaylistManager() + plist = playman["Library"][test_library + "/"] + self.assertEqual(plist.name, test_library) + self.assertIsInstance(plist, library.LibraryPlaylist) + self.assertEqual(id(plist), id(playman["Library"][test_library])) + + alist = playman["Library"][test_album] + self.assertIsInstance(alist, library.LibraryPlaylist) + self.assertNotEqual(id(plist), id(alist)) + self.assertIn(alist, playman["Library"].values()) + self.assertIn(plist, playman["Library"].values()) + + library.library_thread.stop() diff --git a/curds/test_playlist.py b/curds/test_playlist.py deleted file mode 100644 index 2e01135..0000000 --- a/curds/test_playlist.py +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright 2019 (c) Anna Schumaker. -from . import playlist -from . import threadqueue -import os -import unittest - -test_album = os.path.abspath("./trier/Test Album") -test_library = os.path.abspath("./trier/Test Library") - -class TestPlaylistManager(unittest.TestCase): - def setUpClass(): - if not playlist.library.library_thread.is_alive(): - playlist.library.library_thread = threadqueue.ThreadQueue() - - def tearDownClass(): - playlist.library.library_thread.stop() - - def test_playman_init(self): - self.assertIsInstance(playlist.plist_map, dict) - self.assertEqual(playlist.plist_map["Library"], {}) - self.assertTrue(playlist.library.library_thread.is_alive()) - - def test_playman_lookup_library(self): - plist = playlist.lookup_library(test_library + "/") - self.assertIsInstance(plist, playlist.library.LibraryPlaylist) - self.assertEqual(plist.name, test_library) - self.assertEqual(plist, playlist.plist_map["Library"][test_library]) - self.assertEqual(playlist.lookup_library(test_library), plist) - self.assertEqual(len(playlist.plist_map["Library"].values()), 1) - - alist = playlist.lookup_library(test_album) - self.assertIsInstance(alist, playlist.library.LibraryPlaylist) - self.assertIn(alist, playlist.plist_map["Library"].values()) - self.assertIn(plist, playlist.plist_map["Library"].values())