Example #1
0
 def get(self):
     q = self.request.get('q')
     ret = []
     for m in YoutifyUser.all().search(q, properties=['nickname', 'flattr_user_name', 'first_name', 'last_name', 'tagline']):
         ret.append(get_youtify_user_struct(m))
     self.response.headers['Content-Type'] = 'application/json'
     self.response.out.write(simplejson.dumps(ret))
Example #2
0
    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()
Example #3
0
def get_youtify_user_by_email(email):
    try:
        youtify_user = YoutifyUser.all().filter('google_user =', User(email)).get()
        if youtify_user:
            return youtify_user
    except:
        pass
Example #4
0
def get_youtify_user_by_email(email):
    try:
        youtify_user = YoutifyUser.all().filter('google_user2 =', User(email)).get()
        if youtify_user:
            return youtify_user
    except:
        pass
Example #5
0
    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()
Example #6
0
    def post(self, uid):
        other_user = YoutifyUser.get_by_id(int(uid))
        me = get_current_youtify_user_model()

        if other_user is None:
            self.error(400)
            self.response.out.write('Other user not found')
            return

        if me.key().id() == other_user.key().id():
            self.error(400)
            self.response.out.write('You can not follow yourself')
            return

        if FollowRelation.all().filter('user1 =', me).filter('user2 =', other_user).get():
            self.error(400)
            self.response.out.write('You already follow that user')
            return

        me.nr_of_followings += 1
        other_user.nr_of_followers += 1

        me.save()
        other_user.save()

        m = FollowRelation(user1=me.key().id(), user2=other_user.key().id())
        m.put()

        create_follow_activity(me, other_user)
        send_new_follower_email(me, other_user)

        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('ok')
Example #7
0
    def post(self, uid):
        other_user = YoutifyUser.get_by_id(int(uid))
        me = get_current_youtify_user_model()

        if other_user is None:
            self.error(400)
            self.response.out.write('Other user not found')
            return

        if me.key().id() == other_user.key().id():
            self.error(400)
            self.response.out.write('You can not follow yourself')
            return

        if FollowRelation.all().filter('user1 =',
                                       me).filter('user2 =', other_user).get():
            self.error(400)
            self.response.out.write('You already follow that user')
            return

        me.nr_of_followings += 1
        other_user.nr_of_followers += 1

        me.save()
        other_user.save()

        m = FollowRelation(user1=me.key().id(), user2=other_user.key().id())
        m.put()

        create_follow_activity(me, other_user)
        send_new_follower_email(me, other_user)

        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('ok')
Example #8
0
    def post(self):
        user = get_current_youtify_user_model()
        nickname = self.request.get('nickname', user.nickname)
        first_name = self.request.get('first_name', user.first_name)
        last_name = self.request.get('last_name', user.first_name)
        tagline = self.request.get('tagline', user.tagline)

        if nickname and not re.match('^[A-Za-z0-9_]{1,36}$', nickname):
            self.error(400)
            self.response.out.write('Nickname must be 1-36 alphanumerical characters (no whitespace)')
            return

        if nickname and nickname in BLOCKED_NICKNAMES:
            self.error(400)
            self.response.out.write('That nickname is not allowed.')
            return

        for u in YoutifyUser.all().filter('nickname_lower = ', nickname.lower()):
            if str(u.key().id()) != str(user.key().id()):
                self.error(409)
                self.response.out.write('Nickname is already taken')
                return

        user.nickname = nickname
        user.nickname_lower = nickname.lower()
        user.first_name = first_name
        user.last_name = last_name
        user.tagline = tagline

        user.save()

        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write(get_display_name_for_youtify_user_model(user))
Example #9
0
 def get(self):
     json = simplejson.dumps({
         'nr_of_users': len([i for i in YoutifyUser.all().filter('flattr_access_token !=', None)]),
         'nr_of_flattrs': len([i for i in Activity.all().filter('type =', 'outgoing').filter('verb =', 'flattr')]),
     })
     memcache.delete('flattr_stats')
     memcache.add('flattr_stats', json, 3600*24)
Example #10
0
def create_external_subscribe_activity(youtify_user_model, external_user_model):
    target = simplejson.dumps(get_external_user_subscription_struct(external_user_model))
    actor = simplejson.dumps(get_youtify_user_struct(youtify_user_model))

    m = Activity(owner=youtify_user_model, verb='external_subscribe', actor=actor, target=target, type='outgoing')
    m.put()

    for relation in FollowRelation.all().filter('user2 =', youtify_user_model.key().id()):
        m = Activity(owner=YoutifyUser.get_by_id(relation.user1), verb='external_subscribe', actor=actor, target=target, type='incoming')
        m.put()
Example #11
0
def create_flattr_activity(youtify_user_model, thing_id, thing_title):
    target = simplejson.dumps({
        'thing_id': thing_id,
        'thing_title': thing_title,
    })
    actor = simplejson.dumps(get_youtify_user_struct(youtify_user_model))

    m = Activity(owner=youtify_user_model, verb='flattr', actor=actor, target=target, type='outgoing')
    m.put()

    for relation in FollowRelation.all().filter('user2 =', youtify_user_model.key().id()):
        m = Activity(owner=YoutifyUser.get_by_id(relation.user1), verb='flattr', actor=actor, target=target, type='incoming')
        m.put()
Example #12
0
 def get(self):
     json = simplejson.dumps({
         'nr_of_users':
         len([
             i for i in YoutifyUser.all().filter('flattr_access_token !=',
                                                 None)
         ]),
         'nr_of_flattrs':
         len([
             i for i in Activity.all().filter('type =', 'outgoing').filter(
                 'verb =', 'flattr')
         ]),
     })
     memcache.delete('flattr_stats')
     memcache.add('flattr_stats', json, 3600 * 24)
Example #13
0
 def get(self):
     q = self.request.get('q').strip(' \t\n\r')
     if len(q) < 3:
         self.response.headers['Content-Type'] = 'application/json'
         self.response.out.write('[]')
         return
     ret = []
     for m in YoutifyUser.all().search(q,
                                       properties=[
                                           'nickname', 'flattr_user_name',
                                           'first_name', 'last_name',
                                           'tagline'
                                       ]).fetch(30):
         ret.append(get_youtify_user_struct(m))
     self.response.headers['Content-Type'] = 'application/json'
     self.response.out.write(simplejson.dumps(ret))
Example #14
0
    def delete(self):
        """Remove a user from the list of leaders"""
        lang_code = self.request.path.split('/')[-3]
        user_id = self.request.path.split('/')[-1]
        language = Language.all().filter('code =', lang_code).get()
        user = YoutifyUser.get_by_id(int(user_id))

        if language is None:
            self.error(404)

        if user is None:
            self.error(404)

        language.leaders.remove(user.key())
        language.save()

        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('success')
Example #15
0
    def delete(self):
        """Remove a user from the list of leaders"""
        lang_code = self.request.path.split('/')[-3]
        user_id = self.request.path.split('/')[-1]
        language = Language.all().filter('code =', lang_code).get()
        user = YoutifyUser.get_by_id(int(user_id))

        if language is None:
            self.error(404)

        if user is None:
            self.error(404)
        
        language.leaders.remove(user.key())
        language.save()

        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('success')
Example #16
0
    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()
Example #17
0
    def post(self):
        """Add a new leader for this language"""
        lang_code = self.request.path.split('/')[-2]
        language = Language.all().filter('code =', lang_code).get()
        user_id = self.request.get('user')

        if language is None:
            self.error(404)

        if user_id is None:
            self.error(400)

        user = YoutifyUser.get_by_id(int(user_id))

        if user.key() not in language.leaders:
            language.leaders.append(user.key())
            language.save()

        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('success')
Example #18
0
    def post(self):
        """Add a new leader for this language"""
        lang_code = self.request.path.split("/")[-2]
        language = Language.all().filter("code =", lang_code).get()
        user_id = self.request.get("user")

        if language is None:
            self.error(404)

        if user_id is None:
            self.error(400)

        user = YoutifyUser.get_by_id(int(user_id))

        if user.key() not in language.leaders:
            language.leaders.append(user.key())
            language.save()

        self.response.headers["Content-Type"] = "text/plain"
        self.response.out.write("success")
Example #19
0
    def get(self):
        page = int(self.request.get('page', '0'))
        page_size = 30

        ret = []
        count = 0
        for m in YoutifyUser.all().fetch(page_size, page_size * page):
            count += 1
            m.nr_of_followers = FollowRelation.all().filter('user2 =', m.key().id()).count()
            m.nr_of_followings = FollowRelation.all().filter('user1 =', m.key().id()).count()
            m.save()

        self.response.headers['Content-Type'] = 'text/html'
        if (count < page_size):
            self.response.out.write(COMPLETE)
        else:
            self.response.out.write(Template(TEMPLATE).substitute({
                'progress': page_size * page,
                'next': page + 1,
            }))
Example #20
0
    def post(self):
        """Add a new leader for this language"""
        lang_code = self.request.path.split('/')[-2]
        language = Language.all().filter('code =', lang_code).get()
        user_id = self.request.get('user')

        if language is None:
            self.error(404)

        if user_id is None:
            self.error(400)

        user = YoutifyUser.get_by_id(int(user_id))
        
        if user.key() not in language.leaders:
            language.leaders.append(user.key())
            language.save()

        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('success')
Example #21
0
def create_external_subscribe_activity(youtify_user_model,
                                       external_user_model):
    target = simplejson.dumps(
        get_external_user_subscription_struct(external_user_model))
    actor = simplejson.dumps(get_youtify_user_struct(youtify_user_model))

    m = Activity(owner=youtify_user_model,
                 verb='external_subscribe',
                 actor=actor,
                 target=target,
                 type='outgoing')
    m.put()

    for relation in FollowRelation.all().filter('user2 =',
                                                youtify_user_model.key().id()):
        m = Activity(owner=YoutifyUser.get_by_id(relation.user1),
                     verb='external_subscribe',
                     actor=actor,
                     target=target,
                     type='incoming')
        m.put()
Example #22
0
    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()
Example #23
0
def create_flattr_activity(youtify_user_model, thing_id, thing_title):
    target = simplejson.dumps({
        'thing_id': thing_id,
        'thing_title': thing_title,
    })
    actor = simplejson.dumps(get_youtify_user_struct(youtify_user_model))

    m = Activity(owner=youtify_user_model,
                 verb='flattr',
                 actor=actor,
                 target=target,
                 type='outgoing')
    m.put()

    for relation in FollowRelation.all().filter('user2 =',
                                                youtify_user_model.key().id()):
        m = Activity(owner=YoutifyUser.get_by_id(relation.user1),
                     verb='flattr',
                     actor=actor,
                     target=target,
                     type='incoming')
        m.put()
Example #24
0
    def post(self):
        user = get_current_youtify_user_model()
        nickname = self.request.get('nickname', user.nickname)
        first_name = self.request.get('first_name', user.first_name)
        last_name = self.request.get('last_name', user.first_name)
        tagline = self.request.get('tagline', user.tagline)

        if nickname and not re.match('^[A-Za-z0-9_]{1,36}$', nickname):
            self.error(400)
            self.response.out.write(
                'Nickname must be 1-36 alphanumerical characters (no whitespace)'
            )
            return

        if nickname and nickname in BLOCKED_NICKNAMES:
            self.error(400)
            self.response.out.write('That nickname is not allowed.')
            return

        for u in YoutifyUser.all().filter('nickname_lower = ',
                                          nickname.lower()):
            if str(u.key().id()) != str(user.key().id()):
                self.error(409)
                self.response.out.write('Nickname is already taken')
                return

        user.nickname = nickname
        user.nickname_lower = nickname.lower()
        user.first_name = first_name
        user.last_name = last_name
        user.tagline = tagline

        user.save()

        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write(get_display_name_for_youtify_user_model(user))
Example #25
0
    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()