Commit Graph

1016 Commits

Author SHA1 Message Date
Anna Schumaker 04ac4398e2 curds: Create a generic Tags class
I've decided that it would work best if Album and Track classes both
inherit from the same parent class. This will give them some
functionality overlap, and it'll also make it conceptually easier to
store them both in the same tag dictionary.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-03-05 15:51:51 -05:00
Anna Schumaker c4c0c09d46 Add coverage file to .gitignore
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-03-05 14:14:19 -05:00
Anna Schumaker a3fd248c94 curds: Create a ThreadQueue class
We'll use this for scanning tracks, searching musicbrainz, and fetching
album art. The web services are ratelimited, so it doesn't make sense to
use more than one thread in this case. Additionally, scanning tracks
works best as a single thread since we end up holding a lock the entire
function anyway to prevent duplicates.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-03-03 19:53:40 -05:00
Anna Schumaker 29608caddb curds: Remove the data_file_path() function
Now that we have the DataFile class we can remove this function as its
main use is now hidden from users.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-03-02 16:37:39 -05:00
Anna Schumaker 2c538771a3 curds: Add a class for pickling and unpickling objects
This gives us a convenient way to handle saved data. We use the 'with'
statment to handle any errors without crashing.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-03-02 16:24:52 -05:00
Anna Schumaker f56e6764a8 curds: Clean up unused code
I added a make target for code coverage, and used that to identify code
that isn't getting run.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-02-15 16:09:09 -05:00
Anna Schumaker 1eac742bc4 curds: Move the ThreadPoolExecutor into the track code
I think it makes sense to do this transparently through the Track code
so higher layers don't have to do as much work.  We'll just return a
Future-object corresponding to the track that will be added.

It makes sense to only have one thread in this case, since __add() needs
exclusive access to the track_list for its entire execution.  Anything
more would just create conflicts and actually increase execution time.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-02-15 15:54:00 -05:00
Anna Schumaker 2c022163ad curds: Create a single place to get a path to a data file
It's useful to have a way to override where data gets placed in the
filesystem so we don't accidentally clobber production data with test
data while running tests.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-02-14 08:08:42 -05:00
Anna Schumaker 0705f86d81 curds: Add a test for parallel track scanning
And add code for generating a large test library to make stress testing
possible.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-02-06 14:35:35 -05:00
Anna Schumaker 9b64c590cc curds: Switch to using the asyncio module for testing threading
I'm planning to use the asyncio code for running background threads, so
let's switch to it for now to get a feel for how it works.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-02-05 16:20:31 -05:00
Anna Schumaker 2a98aac6de curds: Keep a list of created tracks
We'll use this for scanning and updating the library later.  For now,
just keep everything in a list and do a uniqueness test whenever
something new is added.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-02-04 17:02:04 -05:00
Anna Schumaker c66405bd80 curds: Add basic track class
We account for some fallback values, and also attempt to detect
discnumbers from the album name.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-02-04 17:01:52 -05:00
Anna Schumaker a26e8867fe curds: Try to detect album names that embed a discnumber
We want to be able to pull out just the album name to make a more
accurate musicbrainz search, and so multiple discs link to the same
album object.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-01-28 17:00:40 -05:00
Anna Schumaker 306fa0f40c curds: Add function for album lookups
We want to share album objects whenever possible, so add a lookup
function for checking this.  Python built-in objects (like dictionaries)
are supposedly threadsafe, so we don't need a lock to access them but I
added the threadpool test anyway just in case.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-01-28 16:06:37 -05:00
Anna Schumaker 3b42ca233e curds: Add basic album class
We'll eventually pull out all the fields we need from a Mutagen
FileInfo class, but that has a dictionary-like interface so we can
easily fake one up for testing.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2019-01-24 16:27:25 -05:00
Anna Schumaker eecc32359f Initial commit 2019-01-24 09:35:41 -05:00