def test_update_playlists(self): self._post_playlist() playlists = [m for m in Playlist.all()] playlist_model = playlists[0] json = simplejson.dumps({ 'title': 'britney', 'videos': [ { 'title': 'oh baby baby', 'videoId': 'z2Am3aLwu1E', }, ], }) form = 'json=' + json handler = SpecificPlaylistHandler() handler.request = Request({ 'REQUEST_METHOD': 'POST', 'PATH_INFO': '/api/playlists/' + str(playlist_model.key().id()), 'wsgi.input': StringIO(form), 'CONTENT_LENGTH': len(form), 'SERVER_NAME': 'hi', 'SERVER_PORT': '80', 'wsgi.url_scheme': 'http', }) handler.response = Response() handler.post() playlist_model = Playlist.get_by_id(1) json = simplejson.loads(playlist_model.json) self.failUnless(json['title'] == 'britney')
def get(self): stats = Stats() stats.nr_of_users = 0 stats.nr_of_active_users = 0 try: stats.nr_of_playlists = Playlist.all(keys_only=True).count(read_policy=EVENTUAL_CONSISTENCY) except: pass stats.nr_of_users_with_flattr_account = 0 stats.nr_of_users_with_dropbox = 0 try: stats.nr_of_flattrs = Activity.all().filter('type =', 'outgoing').filter('verb =', 'flattr').count(read_policy=EVENTUAL_CONSISTENCY) except: pass stats.nr_of_playlist_subscriptions = 0 try: stats.nr_of_follow_relations = FollowRelation.all(keys_only=True).count(read_policy=EVENTUAL_CONSISTENCY) except: pass try: for user in YoutifyUser.all(): stats.nr_of_users += 1 if user.flattr_user_name: stats.nr_of_users_with_flattr_account += 1 if user.dropbox_user_name: stats.nr_of_users_with_dropbox += 1 if user.playlist_subscriptions: stats.nr_of_playlist_subscriptions += len(user.playlist_subscriptions) if user.last_login: delta = datetime.now() - user.last_login if delta.seconds < 3600 * 24 * 7: stats.nr_of_active_users += 1 except: pass pings = [] last_ping = None try: for m in PingStats.all().order('-date').fetch(6*24*7): if last_ping is not None and last_ping.date.hour is not m.date.hour: pings.append({ 'date': str(last_ping.date), 'pings': last_ping.pings }) last_ping = m elif last_ping is None or m.pings > last_ping.pings: last_ping = m except: pass stats.pings = simplejson.dumps(pings) stats.put()
def post(self): """Update playlist""" youtify_user = get_current_youtify_user() if youtify_user == None: self.error(403) return playlist_id = self.request.path.split('/')[-1] playlist_model = Playlist.get_by_id(int(playlist_id)) json = self.request.get('json', None) device = self.request.get('device') if json is None: self.error(400) return if playlist_model.owner.key() == youtify_user.key(): if youtify_user.device != device: self.error(409) self.response.out.write('wrong_device') return else: playlist_model.json = json playlist_model.save() self.response.out.write(str(playlist_model.key().id())) else: self.error(403)
def get(self): stats = Stats() stats.nr_of_users = 0 stats.nr_of_active_users = 0 stats.nr_of_playlists = len([i for i in Playlist.all()]) stats.nr_of_users_with_flattr_account = 0 stats.nr_of_flattrs = 0 stats.nr_of_playlist_subscriptions = 0 stats.nr_of_follow_relations = len([i for i in FollowRelation.all()]) for user in YoutifyUser.all(): stats.nr_of_users += 1 if user.flattr_user_name: stats.nr_of_users_with_flattr_account += 1 if user.playlist_subscriptions: stats.nr_of_playlist_subscriptions += len(user.playlist_subscriptions) if user.last_login: delta = datetime.now() - user.last_login if delta.seconds < 3600 * 24 * 7: stats.nr_of_active_users += 1 stats.nr_of_flattrs += len([i for i in Activity.all().filter('owner =', user).filter('verb =', 'flattr')]) stats.put()
def test_create_playlist(self): response = self._post_playlist() playlists = [m for m in Playlist.all()] self.failUnless(len(playlists) == 1) self.failUnless(response == str(playlists[0].key().id()))
def post(self): """Update playlist""" youtify_user_model = get_current_youtify_user_model() if youtify_user_model == None: self.error(403) return playlist_id = self.request.path.split("/")[-1] playlist_model = Playlist.get_by_id(int(playlist_id)) json = self.request.get("json", None) device = self.request.get("device") if json is None: self.error(400) return if playlist_model.owner.key() == youtify_user_model.key(): if youtify_user_model.device != device: self.error(409) self.response.out.write("wrong_device") return else: old_playlist = simplejson.loads(json) playlist_model.private = old_playlist.get("isPrivate", False) playlist_model.tracks_json = simplejson.dumps(old_playlist["videos"]) playlist_model.owner = youtify_user_model playlist_model.title = old_playlist["title"] playlist_model.remote_id = old_playlist["remoteId"] playlist_model.json = None playlist_model.save() self.response.out.write(str(playlist_model.key().id())) else: self.error(403)
def post(self): """Follows a playlist""" youtify_user_model = get_current_youtify_user_model() if youtify_user_model == None: self.error(403) return playlist_id = self.request.path.split('/')[-1] playlist_model = Playlist.get_by_id(int(playlist_id)) if playlist_model is None: self.error(404) return if playlist_model.owner.key().id() == youtify_user_model.key().id(): self.error(400) self.response.out.write('You can not subscribe to your own playlists') return youtify_user_model.playlist_subscriptions.append(playlist_model.key()) youtify_user_model.save() playlist_model.followers.append(youtify_user_model.key()) playlist_model.save() create_subscribe_activity(youtify_user_model, playlist_model) send_new_subscriber_email(youtify_user_model, playlist_model) self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('ok')
def post(self, playlist_id): """Follows a playlist""" youtify_user_model = get_current_youtify_user_model() if youtify_user_model == None: self.error(403) return playlist_model = Playlist.get_by_id(int(playlist_id)) if playlist_model is None: self.error(404) return if playlist_model.owner.key().id() == youtify_user_model.key().id(): self.error(400) self.response.out.write("You can not subscribe to your own playlists") return if playlist_model.key() in youtify_user_model.playlist_subscriptions: self.error(400) self.response.out.write("You already subscribe to this playlist") return youtify_user_model.playlist_subscriptions.append(playlist_model.key()) youtify_user_model.save() playlist_model.followers.append(youtify_user_model.key()) playlist_model.nr_of_followers = len(playlist_model.followers) playlist_model.save() create_subscribe_activity(youtify_user_model, playlist_model) send_new_subscriber_email(youtify_user_model, playlist_model) self.response.headers["Content-Type"] = "text/plain" self.response.out.write("ok")
def get(self): q = self.request.get('q') ret = [] for m in Playlist.all().search(q, properties=['title']).filter('private =', False): ret.append(get_playlist_struct_from_playlist_model(m)) self.response.headers['Content-Type'] = 'application/json' self.response.out.write(simplejson.dumps(ret))
def post(self): """Add a track to the favorite list""" youtify_user_model = get_current_youtify_user_model() if youtify_user_model == None: self.error(403) return playlist_id = self.request.path.split('/')[-1] playlist_model = Playlist.get_by_id(int(playlist_id)) json = self.request.get('json', None) device = self.request.get('device') if json is None: self.error(400) return if playlist_model.owner.key() == youtify_user_model.key(): if youtify_user_model.device != device: self.error(409) self.response.out.write('wrong_device') return else: old_playlist = simplejson.loads(json) playlist_model.private = old_playlist.get('isPrivate', False) playlist_model.tracks_json = simplejson.dumps(old_playlist['videos']) playlist_model.owner = youtify_user_model playlist_model.title = old_playlist['title'] playlist_model.remote_id = old_playlist['remoteId'] playlist_model.json = None playlist_model.save() self.response.out.write(str(playlist_model.key().id())) else: self.error(403)
def get_playlists_json_for_user(youtify_user): playlists = [] for playlist in Playlist.all().filter('owner =', youtify_user): if playlist.json is None: logging.error("Playlist " + str(playlist.key().id()) + " has invalid JSON, skipping...") else: playlists.append(playlist.json) return '[' + ','.join(playlists) + ']'
def get(self): """Get playlist""" playlist_id = self.request.path.split('/')[-1] playlist_model = Playlist.get_by_id(int(playlist_id)) if playlist_model: self.response.headers['Content-Type'] = 'application/json' self.response.out.write(playlist_model.json) else: self.error(404)
def get(self, playlist_id): """Gets the list of users that follow a playlist""" playlist_model = Playlist.get_by_id(int(playlist_id)) json = [] for key in playlist_model.followers: youtify_user_model = db.get(key) json.append(get_youtify_user_struct(youtify_user_model)) self.response.headers["Content-Type"] = "application/json" self.response.out.write(simplejson.dumps(json))
def get(self): user = get_current_youtify_user_model() if ON_PRODUCTION: return for i in range(0,50): tracks_json = [] for j in range(0, 100): tracks_json.append({ "videoId": 27985183, "title": "Oceanic Crust", "duration": 106331, "type": "soundcloud" }) m = Playlist(owner=user, title="Mosaik " + str(i), tracks_json=simplejson.dumps(tracks_json), json=None) m.put() user.playlists.append(m.key()) user.save() self.redirect('/')
def delete(self): """Delete playlist""" youtify_user = get_current_youtify_user() if youtify_user == None: self.error(403) return playlist_id = self.request.path.split('/')[-1] playlist_model = Playlist.get_by_id(int(playlist_id)) if playlist_model.owner.key() == youtify_user.key(): playlist_model.delete() else: self.error(403)
def get(self): user = get_current_youtify_user_model() if ON_PRODUCTION: return for type, username in EXTERNAL_USERS: url = "http://soundcloud.com/" + username response = urlfetch.fetch( "https://api.soundcloud.com/resolve.json?consumer_key=206f38d9623048d6de0ef3a89fea1c4d&url=" + url ) response = simplejson.loads(response.content) external_user_model = ExternalUser( type=type, external_user_id=str(response["id"]), username=username, avatar_url=response["avatar_url"] ) external_user_model.save() user.external_user_subscriptions.append(external_user_model.key()) user.save() external_user_model.subscribers.append(user.key()) external_user_model.save() self.redirect("/") return for i in range(0, 50): tracks_json = [] for j in range(0, 100): tracks_json.append( {"videoId": 27985183, "title": "Oceanic Crust", "duration": 106331, "type": "soundcloud"} ) m = Playlist(owner=user, title="Mosaik " + str(i), tracks_json=simplejson.dumps(tracks_json), json=None) m.put() user.playlists.append(m.key()) user.save() self.redirect("/")
def get(self): """Get playlist""" playlist_id = self.request.path.split('/')[-1] playlist_model = Playlist.get_by_id(int(playlist_id)) playlist_struct = get_playlist_struct_from_playlist_model(playlist_model) if playlist_model.private and playlist_model.owner.key() != get_current_youtify_user_model().key(): self.error(403) return if playlist_struct: self.response.headers['Content-Type'] = 'application/json' self.response.out.write(simplejson.dumps(playlist_struct)) else: self.error(404)
def get(self): """Get playlists for logged in user""" youtify_user = get_current_youtify_user() playlists = [] for playlist in Playlist.all().filter('owner =', youtify_user): if playlist.json is None: logging.error("Playlist " + str(playlist.key().id()) + " has invalid JSON, skipping...") else: playlists.append(playlist.json) output = '[' + ','.join(playlists) + ']' self.response.headers['Content-Type'] = 'application/json' self.response.out.write(output)
def delete(self): """Delete playlist""" youtify_user_model = get_current_youtify_user_model() if youtify_user_model == None: self.error(403) return playlist_id = self.request.path.split("/")[-1] playlist_model = Playlist.get_by_id(int(playlist_id)) if playlist_model.owner.key() == youtify_user_model.key(): youtify_user_model.playlists.remove(playlist_model.key()) youtify_user_model.save() playlist_model.delete() else: self.error(403)
def delete(self, playlist_id): """Unfollows a playlist""" youtify_user_model = get_current_youtify_user_model() if youtify_user_model == None: self.error(403) return playlist_model = Playlist.get_by_id(int(playlist_id)) youtify_user_model.playlist_subscriptions.remove(playlist_model.key()) youtify_user_model.save() playlist_model.followers.remove(youtify_user_model.key()) playlist_model.nr_of_followers = len(playlist_model.followers) playlist_model.save() self.response.headers["Content-Type"] = "text/plain" self.response.out.write("ok")
def delete(self): """Unfollows a playlist""" youtify_user_model = get_current_youtify_user_model() if youtify_user_model == None: self.error(403) return playlist_id = self.request.path.split('/')[-1] playlist_model = Playlist.get_by_id(int(playlist_id)) youtify_user_model.playlist_subscriptions.remove(playlist_model.key()) youtify_user_model.save() playlist_model.followers.remove(youtify_user_model.key()) playlist_model.save() self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('ok')
def delete(self): """Delete playlist""" youtify_user = get_current_youtify_user() if youtify_user == None: self.error(403) return playlist_id = self.request.path.split('/')[-1] playlist_model = Playlist.get_by_id(int(playlist_id)) device = self.request.get('device') if playlist_model.owner.key() == youtify_user.key(): if youtify_user.device != device: self.error(409) self.response.out.write('wrong_device') return else: playlist_model.delete() else: self.error(403)
def post(self): """Create new playlist""" youtify_user_model = get_current_youtify_user_model() json_playlist = simplejson.loads(self.request.get('json')) if json_playlist is None: self.error(500) playlist_model = Playlist(owner=youtify_user_model, json=None) playlist_model.private = json_playlist.get('isPrivate', False) playlist_model.tracks_json = simplejson.dumps(json_playlist['videos']) playlist_model.title = json_playlist['title'] playlist_model.put() youtify_user_model.playlists.append(playlist_model.key()) youtify_user_model.save() self.response.headers['Content-Type'] = 'application/json' self.response.out.write(simplejson.dumps(get_playlist_struct_from_playlist_model(playlist_model)))
def test_get_playlists(self): self._post_playlist() playlists = [m for m in Playlist.all()] playlist_model = playlists[0] handler = PlaylistsHandler() handler.request = Request({ 'REQUEST_METHOD': 'GET', 'PATH_INFO': '/api/playlists', 'SERVER_NAME': 'hi', 'SERVER_PORT': '80', 'wsgi.url_scheme': 'http', }) handler.response = Response() handler.get() response = handler.response.out.getvalue() response = simplejson.loads(response) self.failUnless(response[0]['title'] == 'lopez') self.failUnless(response[0]['remoteId'] == playlist_model.key().id())
def get(self): stats = Stats() stats.nr_of_users = 0 stats.nr_of_active_users = 0 stats.nr_of_playlists = len([i for i in Playlist.all()]) stats.nr_of_users_with_flattr_account = 0 stats.nr_of_flattrs = len([i for i in Activity.all().filter('type =', 'outgoing').filter('verb =', 'flattr')]) stats.nr_of_playlist_subscriptions = 0 stats.nr_of_follow_relations = len([i for i in FollowRelation.all()]) for user in YoutifyUser.all(): stats.nr_of_users += 1 if user.flattr_user_name: stats.nr_of_users_with_flattr_account += 1 if user.playlist_subscriptions: stats.nr_of_playlist_subscriptions += len(user.playlist_subscriptions) if user.last_login: delta = datetime.now() - user.last_login if delta.seconds < 3600 * 24 * 7: stats.nr_of_active_users += 1 pings = [] last_ping = None for m in PingStats.all().order('-date').fetch(6*24*7): if last_ping is not None and last_ping.date.hour is not m.date.hour: pings.append({ 'date': str(last_ping.date), 'pings': last_ping.pings }) last_ping = m elif last_ping is None or m.pings > last_ping.pings: last_ping = m stats.pings = simplejson.dumps(pings) stats.put()
def post(self): """Create new playlist""" youtify_user = get_current_youtify_user() json = simplejson.loads(self.request.get('json')) if json is None: self.error(500) playlist_model = Playlist(owner=youtify_user, json=None) playlist_model.put() json['remoteId'] = playlist_model.key().id() json['owner'] = { 'id': youtify_user.key().id(), 'name': youtify_user.google_user.nickname().split('@')[0], # don't leak users email } playlist_model.json = simplejson.dumps(json) playlist_model.save() self.response.headers['Content-Type'] = 'application/json' self.response.out.write(playlist_model.json)
def post(self): """Create new playlist""" youtify_user_model = get_current_youtify_user_model() if youtify_user_model == None: self.error(403) return json_playlist = simplejson.loads(self.request.get("json")) if json_playlist is None: self.error(500) playlist_model = Playlist(owner=youtify_user_model, json=None) playlist_model.private = json_playlist.get("isPrivate", False) playlist_model.tracks_json = simplejson.dumps(json_playlist["videos"]) playlist_model.title = json_playlist["title"] playlist_model.put() youtify_user_model.playlists.append(playlist_model.key()) youtify_user_model.save() self.response.headers["Content-Type"] = "application/json" self.response.out.write(simplejson.dumps(get_playlist_struct_from_playlist_model(playlist_model)))
# # root logger config # logging.basicConfig( # format="%(asctime)s - \ # [%(process)d]%(filename)s:%(lineno)d - %(levelname)s: %(message)s", # datefmt='%Y-%m-%d %H:%I:%S', # filename=os.path.expanduser('~/.doubanfm.log'), # level=logging.WARNING # ) # # Set up our own logger # logger = logging.getLogger('doubanfm') # logger.setLevel(logging.INFO) playlist = Playlist() config = None mutex_play_state = { 'vol': 100, 'loop': 0 } mutex_time = 0 # mutex_playingsong = playlist.get_playingsong() print 'ttest' print playlist.get_song() # data_main_view = MainDal(mutex_playingsong, mutex_play_state, config) player = MPlayer() player.start_queue(playlist)
from model import Filme, Serie, Playlist vingadores = Filme('vingadores - guerra infinita', 2018, 160) atlanta = Serie('atlanta - um teste', 2018, 2) the_office = Serie('The Office', 2005, 9) titanic = Filme('titanic', 1996, 210) vingadores.dar_like() atlanta.dar_like() atlanta.dar_like() titanic.dar_like() the_office.dar_like() the_office.dar_like() the_office.dar_like() the_office.dar_like() the_office.dar_like() filmes_e_series = [vingadores, atlanta, titanic, the_office] playlist_fds = Playlist('fim de semana', filmes_e_series) print(f'Tamnanho da Playlist: {len(playlist_fds)}') for programa in playlist_fds: # detalhes = programa.duracao if hasattr(programa, 'duracao') else programa.temporadas # print(f'{programa.nome} - {detalhes} D - {programa.likes}') print(programa)
def fetch_toplist(): """Fetch the most popular playlists""" json = [] for m in Playlist.all().filter('private =', False).order('-nr_of_followers').fetch(100): json.append(get_playlist_struct_from_playlist_model(m)) return simplejson.dumps(json)