def test_update_music(self): title = 'music_title' artist = 'music_artist' album = 'music_album' company = 'music_company' public_time = '2013' kbps = '64' uuid = 'douban-uuid' music = add_music(title, artist, album, company, public_time, kbps, self.cover, self.audio, uuid) self.cover.seek(0) self.audio.seek(0) music = get_music()[0] # exchange cover & audio update_music(music, title='new_title', artist='new_artist', album='new_album', company='new_company', public_time='2014', kbps='128', cover=self.audio, audio=self.cover, uuid='new_douban-uuid') music = get_music()[0] assert music.title == 'new_title' assert music.artist == 'new_artist' assert music.album == 'new_album' assert music.company == 'new_company' assert music.public_time == '2014' assert music.kbps == '128' self.cover.seek(0) self.audio.seek(0) assert music.cover.read() == self.audio.read() assert music.audio.read() == self.cover.read() assert music.uuid == 'new_douban-uuid'
def test_add_music(self): title = 'music_title' artist = 'music_artist' album = 'music_album' company = 'music_company' public_time = '2013' kbps = '64' uuid = 'douban-uuid' music = add_music(title, artist, album, company, public_time, kbps, self.cover, self.audio, uuid) try: add_music(title, artist, album, company, public_time, kbps, self.cover, self.audio, uuid) except mongoengine.errors.NotUniqueError: pass assert len(get_music(key=music.key)) == 1 music = get_music()[0] assert music.title == 'music_title' assert music.artist == 'music_artist' assert music.album == 'music_album' assert music.company == 'music_company' assert music.public_time == '2013' assert music.kbps == '64' self.cover.seek(0) self.audio.seek(0) assert music.cover.read() == self.cover.read() assert music.audio.read() == self.audio.read() assert music.uuid == 'douban-uuid'
def test_delete(self): self.login_as_admin() music = add_music('title', 'artist', 'album', 'company', '2001', '64', self.cover, self.audio, 'uuid') music_key = music.key assert len(get_music(key=music_key)) == 1 self.app.delete('/api/music/%s/' % (music_key)) assert len(get_music(key=music_key)) == 0
def test_update_music_by_channel(self): assert login(), 'check the DOUBAN_USER_NAME, DOUBAN_USER_PASSWORD in config.py' assert len(update_channel_list()) > 0 assert len(get_music()) == 0 channel = get_channel()[0] music_list = update_music_by_channel(channel, 1) assert len(music_list) == 1 assert len(get_music()) == 1 channel = get_channel()[0] assert len(channel.music_list) == 1
def test_delete_music(self): title = 'music_title' artist = 'music_artist' album = 'music_album' company = 'music_company' public_time = '2013' kbps = '64' uuid = 'douban-uuid' music = add_music(title, artist, album, company, public_time, kbps, self.cover, self.audio, uuid) assert len(get_music()) == 1 music = get_music()[0] delete_music(music) assert len(get_music()) == 0
def get_user_favor(user, start, end): """return music info """ favors = user.favor[start:end] new_favors = [] for favor in favors: music = get_music(key=favor)[0] new_favors.append(music) return new_favors
def get_user_favor(user, start, end): '''return music info ''' favors = user.favor[start: end] new_favors = [] for favor in favors: music = get_music(key=favor)[0] new_favors.append(music) return new_favors
def test_get_music(self): title = 'music_title' artist = 'music_artist' album = 'music_album' company = 'music_company' public_time = '2013' kbps = '64' uuid = 'douban-uuid' for i in range(10): add_music(title, artist, album, company, public_time, kbps, self.cover, self.audio, uuid + str(i)) assert len(get_music(start=0, end=5)) == 5
def get_user_history(user, start, end): """return as: date, op, music_key, music_title, music_cover """ historys = user.history[start:end] new_historys = [] for history in historys: music = get_music(key=history[2])[0] history.append(music.title) history.append(music.cover) new_historys.append( {"date": history[0], "op": history[1], "key": history[2], "title": history[3], "cover": history[4]} ) return new_historys
def get_user_history(user, start, end): '''return as: date, op, music_key, music_title, music_cover ''' historys = user.history[start: end] new_historys = [] for history in historys: music = get_music(key=history[2])[0] history.append(music.title) history.append(music.cover) new_historys.append({'date': history[0], 'op': history[1], 'key': history[2], 'title': history[3], 'cover': history[4]}) return new_historys
def get(self): args = MusicQueryArgs().args if args == {}: return marshal(get_music_status(), music_status_fields) return marshal(get_music(**args), music_fields)
def delete(self, key): music = get_music(key=key)[0] delete_music(music)
def get_music_by_channel(channel, num): num = min(len(channel.music_list), num) music_list = random.sample(channel.music_list, num) return [get_music(key=each)[0] for each in music_list]
def _update_channel_once(channel, max_num=10): '''update music in channel. max is the max number it will update return updated music please login before this function''' global _user_id, _token, _expire # TODO # maybe need a better method to assert and get cid assert channel.uuid.startswith(DOUBAN_CHANNEL_UUID_FORMAT.split('-')[0]) cid = int(channel.uuid.split('-')[1]) if channel.music_list == []: payload = {'app_name': DOUBAN_SPIDER_NAME, 'version': DOUBAN_SPIDER_VERSION, 'user_id': _user_id, 'expire': _expire, 'token': _token, 'channel': cid, 'type': 'n'} else: uuid = get_music(key=random.choice(channel.music_list))[0].uuid sid = uuid.split('-')[2] payload = {'app_name': DOUBAN_SPIDER_NAME, 'version': DOUBAN_SPIDER_VERSION, 'user_id': _user_id, 'expire': _expire, 'token': _token, 'channel': cid, 'type': 'p', 'sid': sid} # # mark as listened # mark_payload = {'app_name': DOUBAN_SPIDER_NAME, # 'version': DOUBAN_SPIDER_VERSION, # 'user_id': _user_id, # 'expire': _expire, # 'token': _token, # 'channel': cid, # 'type': 'e', # 'sid': sid} # try: # requests.get("http://www.douban.com/j/app/radio/people", params=mark_payload, timeout=5) # except: # pass # # don't play again # mark_payload = {'app_name': DOUBAN_SPIDER_NAME, # 'version': DOUBAN_SPIDER_VERSION, # 'user_id': _user_id, # 'expire': _expire, # 'token': _token, # 'channel': cid, # 'type': 'b', # 'sid': sid} # try: # requests.get("http://www.douban.com/j/app/radio/people", params=mark_payload, timeout=5) # except: # pass try: print 'getting list' r = requests.get("http://www.douban.com/j/app/radio/people", params=payload, timeout=5) except requests.exceptions.ConnectionError: traceback.print_exc() return [] except requests.exceptions.Timeout: traceback.print_exc() return [] r = json.loads(r.text) assert r['r'] == 0 update_music = [] #channel_music_list = channel.music_list for song in r['song']: try: uuid = DOUBAN_MUSIC_UUID_FORMAT % (int(song['aid']), int(song['sid'])) except: # ads continue print uuid music = None if len(get_music(uuid=uuid)) == 0: try: print 'getting song' cover_fd = requests.get(song['picture'], stream=True, timeout=5).raw audio_fd = requests.get(song['url'], stream=True, timeout=5).raw except requests.exceptions.ConnectionError: traceback.print_exc() continue except requests.exceptions.Timeout: traceback.print_exc() continue music = add_music(song['title'], song['artist'], song['albumtitle'], song['company'], song['public_time'], song['kbps'], cover_fd, audio_fd, uuid) else: music = get_music(uuid=uuid)[0] if music and music.key not in channel.music_list: channel_music_list = channel.music_list channel_music_list.append(music.key) update_channel(channel, music_list=channel_music_list) update_music.append(music) if len(update_music) >= max_num: break return update_music
def MusicKey(key): try: assert get_music(key=key)[0] except: raise ValueError("Invalid Music Key") return key
def patch(self, key): args = MusicPatchArgs().args music = get_music(key=key)[0] update_music(music, **args) music = get_music(key=key)[0] return music