/
factory.py
122 lines (95 loc) · 3.17 KB
/
factory.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
from create_database import Song, Playlist, create_db
from os.path import exists
from sqlalchemy.orm import Session
# from mutagen.mp3 import MP3
from mutagen.easyid3 import EasyID3
def insert_song_into_db(engine, song_info):
# Session is our Data Mapper
session = Session(bind=engine)
song = Song(
name=song_info['name'],
path=song_info['path'],
artist=song_info['artist'],
length=song_info['length'],
album=song_info['album']
)
session.add(song)
session.commit()
return song
def insert_playlist_into_db(engine, playlist_info):
session = Session(bind=engine)
if session.query(Playlist).filter(
Playlist.name == playlist_info['name']).all():
playlist = session.query(Playlist).filter(
Playlist.name == playlist_info['name']).all()
else:
playlist = Playlist(
name=playlist_info['name'],
song_id=playlist_info['song_id'],
)
session.add(playlist)
session.commit()
return playlist
def create_song(path, duration, playlist_name='unknown', db_name=''):
if db_name:
engine = create_db(db_name)
else:
engine = create_db()
if exists(path):
original_song = EasyID3(path)
db_song = {
'name': original_song.get('title', [''])[0],
'path': path,
'artist': original_song.get('artist', [''])[0],
'length': duration,
'album': original_song.get('album', [''])[0]
}
# original_song = MP3(path)
# song['length'] = original_song.info.length
created_song = insert_song_into_db(engine, db_song)
playlist_info = {
'name': playlist_name,
'song_id': created_song.id
}
insert_playlist_into_db(engine, playlist_info)
else:
raise Exception('There is not such file or directory! Try another one')
def get_songs(engine, name):
session = Session(bind=engine)
# all_songs = session.query(Song).all()
# print(all_songs)
return session.query(Song).filter(Song.name == name).all()
def update_song_id3(engine, song_name, new_name='', new_artist='',
new_album=''):
session = Session(bind=engine)
song = session.query(Song).filter(Song.name == song_name)
try:
song_path = song.one().path
pass
except Exception:
song_path = './song.mp3'
updated = {}
if new_name:
updated['name'] = new_name
if new_artist:
updated['artist'] = new_artist
if new_album:
updated['album'] = new_album
song.update(updated)
session.commit()
original_song = EasyID3(song_path)
for key, value in updated.items():
if key == 'name':
key = 'title'
original_song[key] = value
original_song.save()
def get_playlist(engine, playlist_name):
session = Session(bind=engine)
return session.query(Playlist).filter(Playlist.name == playlist_name).one()
def main():
engine = create_db()
update_song_id3(engine, 'Bailando.mp3',
new_artist='Enrique Iglesias',
new_album='2003')
if __name__ == '__main__':
main()