def __init__(self): self.data_manager = DataManager("", "rolas.db") self.id = 0 self.album = "" self.performer = "" self.path = "" self.builder = Gtk.Builder() self.builder.add_from_file("resources/tag.glade") self.tag_window = self.builder.get_object("tag_window") self.title_entry = self.builder.get_object("title_entry") self.genre_entry = self.builder.get_object("genre_entry") self.track_entry = self.builder.get_object("track_entry") self.year_entry = self.builder.get_object("year_entry") self.discard_button = self.builder.get_object("discard_button") self.discard_button.connect("clicked", self.hide_window_with_button) self.apply_button = self.builder.get_object("apply_button") self.apply_button.connect("clicked", self.apply_changes) self.tag_window.connect("delete-event", self.hide_window) self.tag_window.connect("destroy", self.hide_window) self.func = lambda: None self.treemodel = None self.treeiter = None
class AlbumWindowController: def __init__(self): self.data_manager = DataManager("", "rolas.db") self.id = 0 self.old_name = "" self.builder = Gtk.Builder() self.builder.add_from_file("resources/album.glade") self.album_window = self.builder.get_object("album_window") self.name_entry = self.builder.get_object("name_entry") self.year_entry = self.builder.get_object("year_entry") self.discard_button = self.builder.get_object("discard_button") self.discard_button.connect("clicked", self.hide_window_with_button) self.apply_button = self.builder.get_object("apply_button") self.apply_button.connect("clicked", self.apply_changes) self.album_window.connect("delete-event", self.hide_window) self.album_window.connect("destroy", self.hide_window) self.filter = None def hide_window(self, window, event): window.hide() return True def hide_window_with_button(self, caller): self.album_window.hide() return True def apply_changes(self, caller): name = self.name_entry.get_text() year = self.year_entry.get_text() self.data_manager.update_album(self.id, name, year) self.album_window.hide() for row in self.filter: if row[1] == self.old_name: row[1] = name return True def set_id(self, id): self.id = id def set_old_name(self, old_name): self.old_name = old_name def set_filter(self, filter): self.filter = filter def set_name_entry_text(self, name): self.name_entry.set_text(name) def set_year_entry_text(self, year): self.year_entry.set_text(year) def show_window(self): self.album_window.show()
class TestCreateDatabase(unittest.TestCase): def setUp(self): self.data_manager = DataManager(directory="", database_name="test.db") def tearDown(self): os.remove("test.db") def test_create_database(self): self.data_manager.create_database() connection = sqlite3.connect("test.db") cursor = connection.cursor() cursor.execute("SELECT name FROM sqlite_master \ WHERE type='table' AND name='performers'") try: self.assertEqual(cursor.fetchone()[0], "performers", 'performers table not created') except: self.fail('Fail, could not get table name') cursor.execute("SELECT name FROM sqlite_master \ WHERE type='table' AND name='persons'") try: self.assertEqual(cursor.fetchone()[0], "persons", 'persons table not created') except: self.fail('Fail, could not get table name') cursor.execute("SELECT name FROM sqlite_master \ WHERE type='table' AND name='groups'") try: self.assertEqual(cursor.fetchone()[0], "groups", 'groups table not created') except: self.fail('Fail, could not get table name') cursor.execute("SELECT name FROM sqlite_master \ WHERE type='table' AND name='albums'") try: self.assertEqual(cursor.fetchone()[0], "albums", 'albums table not created') except: self.fail('Fail, could not get table name') cursor.execute("SELECT name FROM sqlite_master \ WHERE type='table' AND name='rolas'") try: self.assertEqual(cursor.fetchone()[0], "rolas", 'rolas table not created') except: self.fail('Fail, could not get table name') cursor.execute("SELECT name FROM sqlite_master \ WHERE type='table' AND name='in_group'") try: self.assertEqual(cursor.fetchone()[0], "in_group", 'in_group table not created') except: self.fail('Fail, could not get table name')
def __init__(self): self.data_manager = DataManager("", "rolas.db") self.id = 0 self.old_name = "" self.builder = Gtk.Builder() self.builder.add_from_file("resources/album.glade") self.album_window = self.builder.get_object("album_window") self.name_entry = self.builder.get_object("name_entry") self.year_entry = self.builder.get_object("year_entry") self.discard_button = self.builder.get_object("discard_button") self.discard_button.connect("clicked", self.hide_window_with_button) self.apply_button = self.builder.get_object("apply_button") self.apply_button.connect("clicked", self.apply_changes) self.album_window.connect("delete-event", self.hide_window) self.album_window.connect("destroy", self.hide_window) self.filter = None
def setUp(self): self.path = str(path.dirname(path.dirname(path.abspath(__file__)))) self.data_manager = DataManager(directory="", database_name="test.db")
class TestPopulateDatabase(unittest.TestCase): def setUp(self): self.path = str(path.dirname(path.dirname(path.abspath(__file__)))) self.data_manager = DataManager(directory="", database_name="test.db") def tearDown(self): os.remove("test.db") def test_populate_database(self): self.data_manager.create_database() rolaA = Rola(id=1, performer_id=1, album_id=1, path='path/to/rolaA.mp3', title='Caravan', track=6, year=2014, genre='Jazz') rolaB = Rola(id=2, performer_id=2, album_id=2, path='path/to/rolaB.mp3', title='Lost Stars', track=1, year=2012, genre='Pop') rolas = {} rolas[1] = rolaA rolas[2] = rolaB performers = {} performers['Andrew Neiman'] = 1 performers['Dave Kohl'] = 2 albums = {} albums['Shaffer Conservatory Studio Band'] = 1 albums['On The Road'] = 2 self.data_manager.populate_database(rolas, performers, albums) connection = sqlite3.connect("test.db") cursor = connection.cursor() try: cursor.execute( "SELECT rolas.id_rola, rolas.title, performers.name, \ albums.name, rolas.track, rolas.year, \ rolas.genre \ FROM rolas \ INNER JOIN albums ON albums.id_album = rolas.id_album \ INNER JOIN performers ON performers.id_performer \ = rolas.id_performer") except: self.fail('Could not get songs from database') try: songs_from_database = cursor.fetchall() if len(songs_from_database) != 2: self.fail('Not enough songs in database') for song in songs_from_database: if song[0] == 1: self.assertEqual(rolaA.get_title(), song[1], 'Fail, not the same title.') self.assertEqual('Andrew Neiman', song[2], 'Fail, not the same performer.') self.assertEqual('Shaffer Conservatory Studio Band', song[3], 'Fail, not the same album.') self.assertEqual(rolaA.get_track(), song[4], 'Fail, not the same track.') self.assertEqual(rolaA.get_year(), song[5], 'Fail, not the same year.') self.assertEqual(rolaA.get_genre(), song[6], 'Fail, not the same genre.') elif song[0] == 2: self.assertEqual(rolaB.get_title(), song[1], 'Fail, not the same title.') self.assertEqual('Dave Kohl', song[2], 'Fail, not the same performer.') self.assertEqual('On The Road', song[3], 'Fail, not the same album.') self.assertEqual(rolaB.get_track(), song[4], 'Fail, not the same track.') self.assertEqual(rolaB.get_year(), song[5], 'Fail, not the same year.') self.assertEqual(rolaB.get_genre(), song[6], 'Fail, not the same genre.') else: self.fail('Could not get songs from database') except: self.fail('Could not get songs from database') def test_insert_get_performers(self): self.data_manager.create_database() performers = {} performers['Andrew Neiman'] = 1 performers['Dave Kohl'] = 2 self.data_manager.insert_performers(performers) performers_database = self.data_manager.get_performers() self.assertEqual(performers, performers_database, 'Not the same performers') def test_insert_get_albums(self): self.data_manager.create_database() albums = {} albums['Shaffer Conservatory Studio Band'] = 1 albums['On The Road'] = 2 self.data_manager.insert_albums(albums) albums_database = self.data_manager.get_albums() self.assertEqual(albums, albums_database, 'Not the same albums') def test_insert_get_rolas(self): self.data_manager.create_database() rolaA = Rola(id=1, performer_id=1, album_id=1, path='path/to/rolaA.mp3', title='Caravan', track=6, year=2014, genre='Jazz') rolaB = Rola(id=2, performer_id=2, album_id=2, path='path/to/rolaB.mp3', title='Lost Stars', track=1, year=2012, genre='Pop') rolas = {} rolas[1] = rolaA rolas[2] = rolaB self.data_manager.insert_rolas(rolas) rolas_database = self.data_manager.get_rolas() def test_get_performer(self): self.data_manager.create_database() performers = {} performers['Andrew Neiman'] = 1 performers['Dave Kohl'] = 2 self.data_manager.insert_performers(performers) performerA = self.data_manager.get_performer(1) try: self.assertEqual('Andrew Neiman', performerA[2], 'Not the same performer') except: self.fail('Could not get performer') performerB = self.data_manager.get_performer(2) try: self.assertEqual('Dave Kohl', performerB[2], 'Not the same performer') except: self.fail('Could not get performer') def test_get_album(self): self.data_manager.create_database() albums = {} albums['Shaffer Conservatory Studio Band'] = 1 albums['On The Road'] = 2 self.data_manager.insert_albums(albums) albumA = self.data_manager.get_album(1) try: self.assertEqual('Shaffer Conservatory Studio Band', albumA[2], 'Not the same album') except: self.fail('Could not get album') albumB = self.data_manager.get_album(2) try: self.assertEqual('On The Road', albumB[2], 'Not the same album') except: self.fail('Could not get album')
def setUp(self): self.data_manager = DataManager(directory="", database_name="test.db")
class TagWindowController: def __init__(self): self.data_manager = DataManager("", "rolas.db") self.id = 0 self.album = "" self.performer = "" self.path = "" self.builder = Gtk.Builder() self.builder.add_from_file("resources/tag.glade") self.tag_window = self.builder.get_object("tag_window") self.title_entry = self.builder.get_object("title_entry") self.genre_entry = self.builder.get_object("genre_entry") self.track_entry = self.builder.get_object("track_entry") self.year_entry = self.builder.get_object("year_entry") self.discard_button = self.builder.get_object("discard_button") self.discard_button.connect("clicked", self.hide_window_with_button) self.apply_button = self.builder.get_object("apply_button") self.apply_button.connect("clicked", self.apply_changes) self.tag_window.connect("delete-event", self.hide_window) self.tag_window.connect("destroy", self.hide_window) self.func = lambda: None self.treemodel = None self.treeiter = None def hide_window(self, window, event): window.hide() return True def hide_window_with_button(self, caller): self.tag_window.hide() return True def apply_changes(self, caller): title = self.title_entry.get_text() genre = self.genre_entry.get_text() track = self.track_entry.get_text() year = self.year_entry.get_text() self.data_manager.update_rola(self.id, title, track, year, genre) self.tag_window.hide() values = [title, self.album, self.performer, genre, self.path, self.id] self.treemodel.set_row(self.treeiter, values) return True def set_id(self, id): self.id = id def set_album(self, album): self.album = album def set_performer(self, performer): self.performer = performer def set_path(self, path): self.path = path def set_lambda(self, func): self.func = func def set_treemodel(self, treemodel): self.treemodel = treemodel def set_treeiter(self, treeiter): self.treeiter = treeiter def set_title_entry_text(self, title): self.title_entry.set_text(title) def set_genre_entry_text(self, genre): self.genre_entry.set_text(genre) def set_track_entry_text(self, track): self.track_entry.set_text(track) def set_year_entry_text(self, year): self.year_entry.set_text(year) def get_title_entry_text(self, title): self.title_entry.get_text(title) def get_genre_entry_text(self, genre): self.genre_entry.get_text(genre) def get_track_entry_text(self, track): self.track_entry.get_text(track) def get_year_entry_text(self, year): self.year_entry.get_text(year) def show_window(self): self.tag_window.show()
def __init__(self): self.data_manager = DataManager("", "rolas.db") self.type = "Unknown" self.adding_method = "New person" self.id = 0 self.group_id = 0 self.old_name = "" self.builder = Gtk.Builder() self.builder.add_from_file("resources/performer.glade") self.performer_window = self.builder.get_object("performer_window") self.add_window = self.builder.get_object("add_window") self.see_window = self.builder.get_object("see_window") self.liststore = self.builder.get_object("liststore") self.stage_entry = self.builder.get_object("stage_entry") self.real_entry = self.builder.get_object("real_entry") self.birth_entry = self.builder.get_object("birth_entry") self.death_entry = self.builder.get_object("death_entry") self.name_entry = self.builder.get_object("name_entry") self.start_entry = self.builder.get_object("start_entry") self.end_entry = self.builder.get_object("end_entry") self.stage_entry_new = self.builder.get_object("stage_entry_new") self.real_entry_new = self.builder.get_object("real_entry_new") self.birth_entry_new = self.builder.get_object("birth_entry_new") self.death_entry_new = self.builder.get_object("death_entry_new") self.comboboxtext = self.builder.get_object("comboboxtext") self.adding_combobox = self.builder.get_object("adding_combobox") self.builder.connect_signals({ "adding_changed": self.adding_changed, "type_changed": self.change_type, "add_persons": self.trigger_add_window, "see_persons": self.trigger_see_window }) self.stage_name_box = self.builder.get_object("stage_name_box") self.real_name_box = self.builder.get_object("real_name_box") self.birth_box = self.builder.get_object("birth_box") self.death_box = self.builder.get_object("death_box") self.name_box = self.builder.get_object("name_box") self.start_box = self.builder.get_object("start_box") self.end_box = self.builder.get_object("end_box") self.button_box = self.builder.get_object("button_box") self.stage_name_box_new = self.builder.get_object("stage_name_box_new") self.real_name_box_new = self.builder.get_object("real_name_box_new") self.birth_box_new = self.builder.get_object("birth_box_new") self.death_box_new = self.builder.get_object("death_box_new") self.persons_combobox = self.builder.get_object("persons_combobox") self.persons_treeview = self.builder.get_object("persons_treeview") self.see_button = self.builder.get_object("see_button") self.add_button = self.builder.get_object("add_button") self.discard_button = self.builder.get_object("discard_button") self.discard_button.connect("clicked", self.hide_window_with_button) self.apply_button = self.builder.get_object("apply_button") self.apply_button.connect("clicked", self.apply_changes) self.discard_button_add = self.builder.get_object("discard_button_add") self.discard_button_add.connect("clicked", self.hide_add_window_with_button) self.add_person_button = self.builder.get_object("add_person_button") self.add_person_button.connect("clicked", self.add_person) self.performer_window.connect("delete-event", self.hide_window) self.performer_window.connect("destroy", self.hide_window) self.add_window.connect("delete-event", self.hide_add_window) self.add_window.connect("destroy", self.hide_add_window) self.see_window.connect("delete-event", self.hide_window) self.see_window.connect("destroy", self.hide_window) self.filter = None
class PerformerWindowController: def __init__(self): self.data_manager = DataManager("", "rolas.db") self.type = "Unknown" self.adding_method = "New person" self.id = 0 self.group_id = 0 self.old_name = "" self.builder = Gtk.Builder() self.builder.add_from_file("resources/performer.glade") self.performer_window = self.builder.get_object("performer_window") self.add_window = self.builder.get_object("add_window") self.see_window = self.builder.get_object("see_window") self.liststore = self.builder.get_object("liststore") self.stage_entry = self.builder.get_object("stage_entry") self.real_entry = self.builder.get_object("real_entry") self.birth_entry = self.builder.get_object("birth_entry") self.death_entry = self.builder.get_object("death_entry") self.name_entry = self.builder.get_object("name_entry") self.start_entry = self.builder.get_object("start_entry") self.end_entry = self.builder.get_object("end_entry") self.stage_entry_new = self.builder.get_object("stage_entry_new") self.real_entry_new = self.builder.get_object("real_entry_new") self.birth_entry_new = self.builder.get_object("birth_entry_new") self.death_entry_new = self.builder.get_object("death_entry_new") self.comboboxtext = self.builder.get_object("comboboxtext") self.adding_combobox = self.builder.get_object("adding_combobox") self.builder.connect_signals({ "adding_changed": self.adding_changed, "type_changed": self.change_type, "add_persons": self.trigger_add_window, "see_persons": self.trigger_see_window }) self.stage_name_box = self.builder.get_object("stage_name_box") self.real_name_box = self.builder.get_object("real_name_box") self.birth_box = self.builder.get_object("birth_box") self.death_box = self.builder.get_object("death_box") self.name_box = self.builder.get_object("name_box") self.start_box = self.builder.get_object("start_box") self.end_box = self.builder.get_object("end_box") self.button_box = self.builder.get_object("button_box") self.stage_name_box_new = self.builder.get_object("stage_name_box_new") self.real_name_box_new = self.builder.get_object("real_name_box_new") self.birth_box_new = self.builder.get_object("birth_box_new") self.death_box_new = self.builder.get_object("death_box_new") self.persons_combobox = self.builder.get_object("persons_combobox") self.persons_treeview = self.builder.get_object("persons_treeview") self.see_button = self.builder.get_object("see_button") self.add_button = self.builder.get_object("add_button") self.discard_button = self.builder.get_object("discard_button") self.discard_button.connect("clicked", self.hide_window_with_button) self.apply_button = self.builder.get_object("apply_button") self.apply_button.connect("clicked", self.apply_changes) self.discard_button_add = self.builder.get_object("discard_button_add") self.discard_button_add.connect("clicked", self.hide_add_window_with_button) self.add_person_button = self.builder.get_object("add_person_button") self.add_person_button.connect("clicked", self.add_person) self.performer_window.connect("delete-event", self.hide_window) self.performer_window.connect("destroy", self.hide_window) self.add_window.connect("delete-event", self.hide_add_window) self.add_window.connect("destroy", self.hide_add_window) self.see_window.connect("delete-event", self.hide_window) self.see_window.connect("destroy", self.hide_window) self.filter = None def hide_window(self, window, event): window.hide() return True def hide_add_window(self, window, event): self.persons_combobox.remove_all() window.hide() return True def hide_window_with_button(self, caller): self.performer_window.hide() return True def hide_add_window_with_button(self, caller): self.persons_combobox.remove_all() self.add_window.hide() return True def change_type(self, caller): self.type = self.comboboxtext.get_active_text() if self.type == "Group": self.name_box.show() self.start_box.show() self.end_box.show() self.button_box.show() self.stage_name_box.hide() self.real_name_box.hide() self.birth_box.hide() self.death_box.hide() elif self.type == "Person": self.stage_name_box.show() self.real_name_box.show() self.birth_box.show() self.death_box.show() self.name_box.hide() self.start_box.hide() self.end_box.hide() self.button_box.hide() elif self.type == "Unknown": self.name_box.show() self.start_box.hide() self.end_box.hide() self.stage_name_box.hide() self.real_name_box.hide() self.birth_box.hide() self.death_box.hide() self.button_box.hide() return True def adding_changed(self, caller): self.type = self.adding_combobox.get_active_text() if self.type == "Existing person": self.stage_name_box_new.hide() self.real_name_box_new.hide() self.birth_box_new.hide() self.death_box_new.hide() self.persons_combobox.show() self.adding_method = "Existing person" elif self.type == "New person": self.stage_name_box_new.show() self.real_name_box_new.show() self.birth_box_new.show() self.death_box_new.show() self.persons_combobox.hide() self.adding_method = "New person" return True def clear_entries(self): self.stage_entry.set_text("") self.real_entry.set_text("") self.birth_entry.set_text("") self.death_entry.set_text("") self.name_entry.set_text("") self.start_entry.set_text("") self.end_entry.set_text("") def clear_add_window_entries(self): self.stage_entry_new.set_text("") self.real_entry_new.set_text("") self.birth_entry_new.set_text("") self.death_entry_new.set_text("") def apply_changes(self, caller): name = "" if self.type == "Unknown": name = self.name_entry.get_text() self.data_manager.update_performer(self.id, 2, name) elif self.type == "Person": stage_name = self.stage_entry.get_text() name = stage_name real_name = self.real_entry.get_text() birth_date = self.birth_entry.get_text() death_date = self.death_entry.get_text() if self.data_manager.is_unknown(self.id): self.data_manager.update_performer(self.id, 0, stage_name) self.data_manager.insert_person(stage_name, real_name, birth_date, death_date) elif self.data_manager.is_in_performers(stage_name, 0): self.data_manager.update_person(stage_name, real_name, birth_date, death_date) elif self.type == "Group": name = self.name_entry.get_text() start_date = self.start_entry.get_text() end_date = self.end_entry.get_text() if self.data_manager.is_unknown(self.id): self.data_manager.update_performer(self.id, 1, name) self.data_manager.insert_group(name, start_date, end_date) elif self.data_manager.is_in_performers(name, 1): self.data_manager.update_group(name, start_date, end_date) self.clear_entries() self.performer_window.hide() for row in self.filter: if row[2] == self.old_name: row[2] = name return True def add_person(self, caller): name = "" if self.adding_method == "New person": stage_name = self.stage_entry_new.get_text() name = stage_name real_name = self.real_entry_new.get_text() birth_date = self.birth_entry_new.get_text() death_date = self.death_entry_new.get_text() self.data_manager.insert_person(stage_name, real_name, birth_date, death_date) group = self.data_manager.get_group(self.name_entry.get_text()) person = self.data_manager.get_person(name) self.data_manager.insert_in_group(person[0], group[0]) elif self.adding_method == "Existing person": name = self.persons_combobox.get_active_text() group = self.data_manager.get_group(self.name_entry.get_text()) person = self.data_manager.get_person(name) if self.data_manager.is_in_group(person[0], group[0]): pass else: self.data_manager.insert_in_group(person[0], group[0]) self.clear_add_window_entries() self.persons_combobox.remove_all() self.add_window.hide() return True def set_id(self, id): self.id = id def set_type(self, type): self.type = type def set_old_name(self, old_name): self.old_name = old_name def set_filter(self, filter): self.filter = filter def set_stage_entry_text(self, stage): self.stage_entry.set_text(stage) def set_real_entry_text(self, real): self.real_entry.set_text(real) def set_birth_entry_text(self, birth): self.birth_entry.set_text(birth) def set_death_entry_text(self, death): self.death_entry.set_text(death) def set_name_entry_text(self, name): self.name_entry.set_text(name) def set_start_entry_text(self, start): self.start_entry.set_text(start) def set_end_entry_text(self, end): self.end_entry.set_text(end) def trigger_add_window(self, caller): persons = self.data_manager.get_persons() for person in persons: self.persons_combobox.append_text(person[0]) self.persons_combobox.hide() self.add_window.show() def trigger_see_window(self, caller): persons = self.data_manager.get_persons_in_group(self.group_id) persons_names = [] for person in persons: list = [] list.append(self.data_manager.get_person_by_id(person[0])[1]) persons_names.append(list) listmodel = Gtk.ListStore(str) for item in persons_names: listmodel.append(item) filter = listmodel.filter_new() self.persons_treeview.set_model(filter) self.see_window.show() def show_window(self): if self.type == "Unknown": self.comboboxtext.set_active(0) self.name_box.show() self.start_box.hide() self.end_box.hide() self.stage_name_box.hide() self.real_name_box.hide() self.birth_box.hide() self.death_box.hide() self.see_button.set_sensitive(False) self.add_button.set_sensitive(False) elif self.type == "Person": self.comboboxtext.set_active(1) self.see_button.set_sensitive(False) self.add_button.set_sensitive(False) elif self.type == "Group": self.comboboxtext.set_active(2) self.see_button.set_sensitive(True) self.add_button.set_sensitive(True) self.group_id = self.data_manager.get_group( self.name_entry.get_text())[0] self.performer_window.show() def start(self): columns = ["Name"] name_list = [[" "]] for name in name_list: self.liststore.append(name) for index, column in enumerate(columns): # cellrenderer to render the text cell = Gtk.CellRendererText() # the column is created col = Gtk.TreeViewColumn(column, cell, text=index) # and it is appended to the treeview self.persons_treeview.append_column(col)