Esempio n. 1
0
def boredRecommend(user_id, num=DEF_REC_NUM):
    recommendations = gae_cache.cache_get(user_id + 'boredrmd')
    if recommendations:
        return recommendations

    expertise = ExUserInfo.gql('WHERE user_id = :1', user_id).get().expertise
    diff_expertise = set(data_models.EXPERTISES.keys())
    diff_expertise.difference_update(set(expertise))

    if not diff_expertise:
        return None
    query1 = URLStorage.gql('WHERE topic IN :1', list(diff_expertise))
    #    url_recs = [item for item in query1]
    #    logging.info('number of bored rmds: ' + str(len(url_recs)))
    #    li = [random.randint(0, len(url_recs)-1) for i in range(2*num)]
    query2 = Rating.gql('WHERE user_id = :1', user_id)
    rated = [item.url for item in query2]
    recommendations = []
    for url_rec in query1:
        if url_rec.url not in rated:
            recommendations.append(url_rec)
            if len(recommendations) >= num:
                break

    gae_cache.cache_put(user_id + 'boredrmd', recommendations)
    return recommendations
Esempio n. 2
0
def worth_points(url, user, update_cache = False):
    points = gae_cache.cache_get(user.user_id+url+'points')
    if points and not update_cache:
        return points
    points = None
    
    m_rating = Rating.gql('WHERE user_id = :1 AND url = :2', user.user_id, url).get()
    #if less than one hour between two attempts, no points are awarded
    current_time = datetime.datetime.now()
    if m_rating and (current_time - m_rating.time).total_seconds() < 3600:
        points = 0
    
    if points is None:
        points =  BASIC_RATING_POINTS
        #punish multiple attempts to a specific url
        punish_coefficient = 1
        if m_rating:
            punish_coefficient = math.pow(0.5, float(m_rating.attempts))
        sparse_points = 0
        diff_coefficient = 1
        url_stat = URLStorage.gql('WHERE url = :1', url).get()
        if url_stat:
            for i in range(6):
                if url_stat.total < SPARSITY_LEVEL[i]:
                    sparse_points = SPARSITY_POINTS[i]
                    break
            r = url_stat.ratings
            diff_coefficient = 1.0 / (((abs(r[4] + r[3] - r[1] - r[0])) / (r[4] + r[3] + r[1] + r[0] + 10.0)) + 1)
            points = int(math.ceil(sparse_points * diff_coefficient * punish_coefficient))
    
    gae_cache.cache_put(user.user_id+url+'points', points)
    return points
Esempio n. 3
0
def boredRecommend(user_id, num = DEF_REC_NUM):
    recommendations = gae_cache.cache_get(user_id + 'boredrmd')
    if recommendations:
        return recommendations
    
    expertise = ExUserInfo.gql('WHERE user_id = :1', user_id).get().expertise
    diff_expertise = set(data_models.EXPERTISES.keys())
    diff_expertise.difference_update(set(expertise))
    
    if not diff_expertise:
        return None
    query1 = URLStorage.gql('WHERE topic IN :1', list(diff_expertise))
#    url_recs = [item for item in query1]
#    logging.info('number of bored rmds: ' + str(len(url_recs)))
#    li = [random.randint(0, len(url_recs)-1) for i in range(2*num)]
    query2 = Rating.gql('WHERE user_id = :1', user_id)
    rated = [item.url for item in query2]
    recommendations = []
    for url_rec in query1:
        if url_rec.url not in rated:
            recommendations.append(url_rec)
            if len(recommendations) >= num:
                break
    
    gae_cache.cache_put(user_id+'boredrmd', recommendations)
    return recommendations
Esempio n. 4
0
 def get(self, id):
     m_user = User.gql('WHERE user_id = :1', id).get()
     query = Rating.gql('WHERE user_id = :1 ORDER BY time DESC', id)
     ratings = [rating for rating in query]
     self.render('user_ratings.html',
                 ratings=ratings,
                 user=m_user,
                 is_friend=self.is_friend(id))
Esempio n. 5
0
 def get(self, id):
     m_user = User.gql('WHERE user_id = :1', id).get()
     query = Rating.gql('WHERE user_id = :1 ORDER BY time DESC', id)
     ratings = [rating for rating in query]
     self.render('user_ratings.html',
                 ratings = ratings,
                 user = m_user,
                 is_friend = self.is_friend(id))
Esempio n. 6
0
    def store_rating_data(self):
        overall_rating = int(self.request.get('overall_rating'))
        url = self.request.get('url')
        comment = self.request.get('comment')
        truthfulness = int(self.request.get('truthfulness'))
        unbiased = int(self.request.get('unbiased'))
        security = int(self.request.get('security'))
        design = int(self.request.get('design'))

        query = Rating.gql('WHERE user_id = :1 AND url = :2',
                           self.user.user_id, url)
        rating_entry = query.get()
        oldrating = 0
        if rating_entry:
            oldrating = rating_entry.rating
            rating_entry.rating = overall_rating
            rating_entry.comment = comment
            rating_entry.truthfulness = truthfulness
            rating_entry.unbiased = unbiased
            rating_entry.security = security
            rating_entry.design = design
            rating_entry.attempts += 1
            rating_entry.put()
        else:
            rating_id = data_models.generate_rid()
            rating_entry = Rating(key_name=rating_id,
                                  rating_id=rating_id,
                                  user_id=self.user.user_id,
                                  url=url,
                                  rating=overall_rating,
                                  comment=comment,
                                  truthfulness=truthfulness,
                                  unbiased=unbiased,
                                  security=security,
                                  design=design,
                                  attempts=1,
                                  upvotes=0)
            rating_entry.put()
        data_models.update_url_storage(url, oldrating, overall_rating)
        #        data_models.test_update_url_storage(url, oldrating, overall_rating)
        return rating_entry
Esempio n. 7
0
    def store_rating_data(self):
        overall_rating = int(self.request.get('overall_rating'))
        url = self.request.get('url')
        comment = self.request.get('comment')
        truthfulness = int(self.request.get('truthfulness'))
        unbiased = int(self.request.get('unbiased'))
        security = int(self.request.get('security'))
        design = int(self.request.get('design'))
        
        query = Rating.gql('WHERE user_id = :1 AND url = :2', self.user.user_id, url)
        rating_entry = query.get()
        oldrating = 0
        if rating_entry:
            oldrating = rating_entry.rating
            rating_entry.rating = overall_rating
            rating_entry.comment = comment
            rating_entry.truthfulness = truthfulness
            rating_entry.unbiased = unbiased
            rating_entry.security = security
            rating_entry.design = design
            rating_entry.attempts += 1
            rating_entry.put()
        else:
            rating_id = data_models.generate_rid()
            rating_entry = Rating(key_name = rating_id,
                                  rating_id = rating_id,
                                  user_id = self.user.user_id,
                                  url = url,
                                  rating = overall_rating,
                                  comment = comment,
                                  truthfulness = truthfulness,
                                  unbiased = unbiased,
                                  security = security,
                                  design = design,
                                  attempts = 1,
                                  upvotes = 0)
            rating_entry.put()
        data_models.update_url_storage(url, oldrating, overall_rating)
#        data_models.test_update_url_storage(url, oldrating, overall_rating)
        return rating_entry
Esempio n. 8
0
 def get(self):
     rid = self.request.get('rid')
     vote = Vote.gql('WHERE user_id = :1 AND rating_id = :2', self.user.user_id, rid).get()
     if vote:
         self.response.out.write('0')
     else:
         vote = Vote(user_id = self.user.user_id,
                     rating_id = rid)
         review = Rating.get_by_key_name(rid)
         review.upvotes += 1
         review.put()
         vote.put()
         self.response.out.write('1')
Esempio n. 9
0
def sparseRecommend(user_id, num=DEF_REC_NUM):
    recommendations = gae_cache.cache_get(user_id + 'sparsermd')
    if recommendations:
        return recommendations

    query1 = URLStorage.gql('ORDER BY total ASC')
    query2 = Rating.gql('WHERE user_id = :1', user_id)
    rated = [item.url for item in query2]
    recommendations = []
    tmp = 0
    for url_rec in query1:
        tmp += 1
        if url_rec.url not in rated:
            recommendations.append(url_rec)
            if len(recommendations) >= num:
                break

    gae_cache.cache_put(user_id + 'sparsermd', recommendations)
    return recommendations
Esempio n. 10
0
def sparseRecommend(user_id, num = DEF_REC_NUM):
    recommendations = gae_cache.cache_get(user_id + 'sparsermd')
    if recommendations:
        return recommendations
    
    query1 = URLStorage.gql('ORDER BY total ASC')
    query2 = Rating.gql('WHERE user_id = :1', user_id)
    rated = [item.url for item in query2]
    recommendations = []
    tmp = 0
    for url_rec in query1:
        tmp += 1
        if url_rec.url not in rated:
            recommendations.append(url_rec)
            if len(recommendations) >= num:
                break
    
    gae_cache.cache_put(user_id+'sparsermd', recommendations)
    return recommendations
Esempio n. 11
0
 def get_details(self, url):
     query = Rating.gql('WHERE url = :1', url)
     ratings = [item for item in query]
     list1 = [
         item.truthfulness for item in ratings if item.truthfulness > 0
     ]
     list2 = [item.unbiased for item in ratings if item.unbiased > 0]
     list3 = [item.security for item in ratings if item.security > 0]
     list4 = [item.design for item in ratings if item.design > 0]
     truthfulness = 0
     unbiased = 0
     security = 0
     design = 0
     if list1:
         truthfulness = float(sum(list1)) / len(list1)
     if list2:
         unbiased = float(sum(list2)) / len(list2)
     if list3:
         security = float(sum(list3)) / len(list3)
     if list4:
         design = float(sum(list4)) / len(list4)
     return (truthfulness, unbiased, security, design)
Esempio n. 12
0
def worth_points(url, user, update_cache=False):
    points = gae_cache.cache_get(user.user_id + url + 'points')
    if points and not update_cache:
        return points
    points = None

    m_rating = Rating.gql('WHERE user_id = :1 AND url = :2', user.user_id,
                          url).get()
    #if less than one hour between two attempts, no points are awarded
    current_time = datetime.datetime.now()
    if m_rating and (current_time - m_rating.time).total_seconds() < 3600:
        points = 0

    if points is None:
        points = BASIC_RATING_POINTS
        #punish multiple attempts to a specific url
        punish_coefficient = 1
        if m_rating:
            punish_coefficient = math.pow(0.5, float(m_rating.attempts))
        sparse_points = 0
        diff_coefficient = 1
        url_stat = URLStorage.gql('WHERE url = :1', url).get()
        if url_stat:
            for i in range(6):
                if url_stat.total < SPARSITY_LEVEL[i]:
                    sparse_points = SPARSITY_POINTS[i]
                    break
            r = url_stat.ratings
            diff_coefficient = 1.0 / (((abs(r[4] + r[3] - r[1] - r[0])) /
                                       (r[4] + r[3] + r[1] + r[0] + 10.0)) + 1)
            points = int(
                math.ceil(sparse_points * diff_coefficient *
                          punish_coefficient))

    gae_cache.cache_put(user.user_id + url + 'points', points)
    return points
Esempio n. 13
0
def num_of_ratings(uid):
    num = Rating.gql('WHERE user_id = :1', uid).count()
    return num
Esempio n. 14
0
def num_of_ratings(uid):
    num = Rating.gql("WHERE user_id = :1", uid).count()
    return num
Esempio n. 15
0
 def get(self):
     url = self.request.get('url')
     query = Rating.gql('WHERE url = :1 ORDER BY time DESC', url)
     ratings = [item for item in query]
     self.render('url_ratings.html', ratings=ratings)
Esempio n. 16
0
 def get_ratings_by_id(self, id):
     query = Rating.gql('WHERE user_id = :1 ORDER BY time DESC', id)
     result = [item for item in query]
     return result