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
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
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
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))
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))
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
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
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')
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
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
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)
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
def num_of_ratings(uid): num = Rating.gql('WHERE user_id = :1', uid).count() return num
def num_of_ratings(uid): num = Rating.gql("WHERE user_id = :1", uid).count() return num
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)
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