コード例 #1
0
ファイル: test_playlists.py プロジェクト: jensnockert/youtify
    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')
コード例 #2
0
ファイル: stats.py プロジェクト: Narii1416/youtify
    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()
コード例 #3
0
ファイル: playlists.py プロジェクト: jensnockert/youtify
    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)
コード例 #4
0
ファイル: stats.py プロジェクト: Erkan-Yilmaz/youtify
    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()
コード例 #5
0
ファイル: test_playlists.py プロジェクト: jensnockert/youtify
    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()))
コード例 #6
0
ファイル: playlists.py プロジェクト: noisebleed/youtify
    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)
コード例 #7
0
ファイル: playlists.py プロジェクト: Erkan-Yilmaz/youtify
    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')
コード例 #8
0
ファイル: playlists.py プロジェクト: noisebleed/youtify
    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")
コード例 #9
0
ファイル: search.py プロジェクト: Erkan-Yilmaz/youtify
 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))
コード例 #10
0
ファイル: favorites.py プロジェクト: Narii1416/youtify
    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)
コード例 #11
0
ファイル: playlists.py プロジェクト: jensnockert/youtify
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) + ']'
コード例 #12
0
ファイル: playlists.py プロジェクト: melpomene/youtify
    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)
コード例 #13
0
ファイル: playlists.py プロジェクト: noisebleed/youtify
    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))
コード例 #14
0
ファイル: fakesetup.py プロジェクト: Erkan-Yilmaz/youtify
    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('/')
コード例 #15
0
ファイル: playlists.py プロジェクト: jensnockert/youtify
    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)
コード例 #16
0
ファイル: fakesetup.py プロジェクト: hanlindev/youtify
    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("/")
コード例 #17
0
ファイル: playlists.py プロジェクト: glesperance/youtify
    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)
コード例 #18
0
ファイル: playlists.py プロジェクト: melpomene/youtify
    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)
コード例 #19
0
ファイル: playlists.py プロジェクト: noisebleed/youtify
    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)
コード例 #20
0
ファイル: playlists.py プロジェクト: noisebleed/youtify
    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")
コード例 #21
0
ファイル: playlists.py プロジェクト: Erkan-Yilmaz/youtify
 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')
コード例 #22
0
ファイル: playlists.py プロジェクト: melpomene/youtify
    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)
コード例 #23
0
ファイル: playlists.py プロジェクト: Erkan-Yilmaz/youtify
    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)))
コード例 #24
0
ファイル: test_playlists.py プロジェクト: jensnockert/youtify
    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())
コード例 #25
0
ファイル: stats.py プロジェクト: glesperance/youtify
    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()
コード例 #26
0
ファイル: playlists.py プロジェクト: melpomene/youtify
    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)
コード例 #27
0
ファイル: playlists.py プロジェクト: noisebleed/youtify
    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)))
コード例 #28
0
ファイル: douban.py プロジェクト: lisennku/douban.fm
# # 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)
コード例 #29
0
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)
コード例 #30
0
ファイル: playlists_toplist.py プロジェクト: MOZGIII/youtify
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)