def test_should_not_override_existing_values(self): reader = TagReader() title = reader.readfile(self.filename)['TITLE'] writer = TagWriter() from time import time now = str(time() * 1000) tags = { 'ALBUM': now } writer.write(tags, self.filename) self.assertEqual(title, reader.readfile(self.filename)['TITLE'])
def test_should_write_tags(self): writer = TagWriter() from time import time now = str(time() * 1000) tags = { 'ALBUM': now } writer.write(tags, self.filename) reader = TagReader() document = reader.readfile(self.filename) self.assertEqual(document['ALBUM'], now)
def __init__(self, library_name): self.library_name = library_name self.client = MongoClient() self.collection = {} self.tag_reader = TagReader() self.tag_writer = TagWriter()
class Library: def __init__(self, library_name): self.library_name = library_name self.client = MongoClient() self.collection = {} self.tag_reader = TagReader() self.tag_writer = TagWriter() def restore(self): db = self.client[self.library_name] self.collection = db.tags return self def create(self, folder_name, listener=NullListener()): db = self.client[self.library_name] db.drop_collection('tags') self.collection = db.tags documents = self.tag_reader.readfolder(folder_name, listener).items() for key, tag in documents: self.collection.insert_one(tag) return self def track_details(self, track_id): return self.collection.find_one({'_id': track_id}) def load_single_picture(self, track): return self.tag_reader.read_pictures(track['PATH'])[0] def replace_cover_art(self, raw_data, track): print("Saving cover art in {}".format(track['PATH'])) self.tag_writer.replace_picture(raw_data, track['PATH']) def view(self): return LibraryView(self.collection) def aggregate(self, match, group_by): if group_by == 'TITLE': return [track['TITLE'] for track in self.find_tracks(match)] pipeline = [ {"$match": match}, {"$group": {"_id": "$" + group_by}} ] cur = self.collection.aggregate(pipeline) return sorted([item['_id'] for item in cur]) def find_tracks(self, match): return list(self.collection.find(match).sort('TRACKNUMBER')) def store(self, track_id, tags): file_name = tags['PATH'] self.collection.replace_one({'_id': track_id}, tags) self.tag_writer.write(tags, file_name) def rename(self, tracks, base_folder): for track in tracks: composer = track['COMPOSER'] genre = track['GENRE'] album = track['ALBUM'] artist = track['ARTIST'] year = track['DATE'] track_number = track['TRACKNUMBER'] new_folder = "{}\\{}\\{}\\{}\\{}, {}".format(base_folder, composer, genre, album, artist, year) import os os.makedirs(new_folder, exist_ok=True) new_path = "{}\\{}.flac".format(new_folder, track_number.zfill(2)) # print(new_path) existing_path = track['PATH'] print(existing_path) if new_path != existing_path: # from shutil import rename import shutil shutil.move(existing_path, new_path) def __str__(self, *args, **kwargs): return "Library {}".format(self.library_name)