def get(self, url): user = users.get_current_user() if user and users.is_current_user_admin(): context = {'user' : user.nickname()} logout_url = users.create_logout_url(self.request.uri) context['logout_url'] = logout_url if url == 'algorithm.html': context['alg'] = model.getOrderingAlgorithmParams() elif url == 'background.html': activities = model.getActivities(False) i = 0 for activity in activities: activity.index = i i += 1 newActivity = model.ActivityParams() newActivity.name = NEW_ACTIVITY_NAME newActivity.activity_load = 0 newActivity.index = i newActivity.enabled = False newActivity.threshold_total[model.ActivityTypes.ITEM] = 0 newActivity.threshold_time_sec[model.ActivityTypes.ITEM] = 0 activities.append(newActivity) context['activities'] = activities context['timePeriod'] = activityManager.getActivityPeriod() elif url =='publishers.html': publishers = model.getPublisherSites() context['publishers'] = publishers elif url =='paymentsconfig.html': context['paymentparams'] = model.getPaymentConfig() elif url =='ligerpediaconfig.html': context['ligerpediaconfig'] = model.getLigerpediaConfig() elif url =='defaultlinks.html': config = model.getDefaultLinksConfig() context['publisher'] = model.getPublisherSite(config.default_links_url) context['defaultlinksconfig'] = config items = defaultItemList.getOrderedItems() views = 0 for item in items: views += item.stats[model.StatType.VIEWS] context['items'] = items context['totalviews'] = views path = '' if url and len(url) > 0: path = os.path.join(os.path.dirname(__file__), 'webadmin', url) else: path = os.path.join(os.path.dirname(__file__), 'webadmin', 'index.html') self.response.out.write(template.render(path, context)) elif user and users.is_current_user_admin() == False: context = {'user' : user.nickname()} login_url = users.create_login_url(self.request.uri) context['login_url'] = login_url path = os.path.join(os.path.dirname(__file__), 'webadmin', 'unauthorized.html') self.response.out.write(template.render(path, context)) else: self.redirect(users.create_login_url(self.request.uri))
def updateAlg(self): params = model.getOrderingAlgorithmParams() err = params.update(float(self.request.get('t1_eng')), float(self.request.get('t2_eng')), int(self.request.get('num_views')), float(self.request.get('ctr_factor')), float(self.request.get('t2_t3_ratio'))) if (err == ''): filterStrategy.refreshParams() self.redirect('algorithm.html?status=updated') else: self.response.out.write(err)
def applyFilter(self, items, filter): if not self.params or self.doRefreshParams: self.params = model.getOrderingAlgorithmParams() self.doRefreshParams = False tier0 = [] tier1 = [] tier2 = [] tier3 = [] #TODO: support timeliness #TODO: support likes for item in items: item.id = item.key().id() # likes = float(item.stats[model.StatType.LIKES]) closes = self.getCloses_(item) views = self.getViews_(item) clicks = self.getClicks_(item) engagement = 0 if views > 0: engagement = (clicks * self.params.ctr_factor - closes * (1-self.params.ctr_factor)) / views item.engagement = engagement if views < self.params.num_views_threshold and item.price > 0: tier0.append(item) item.tier = 0 continue if views >= self.params.num_views_threshold and engagement >= self.params.tier1_engagement_threshold: tier1.append(item) item.tier = 1 continue if engagement >= self.params.tier2_engagement_threshold: tier2.append(item) item.tier = 2 continue if views < self.params.num_views_threshold: item.tier = 3 tier3.append(item) continue sortedTier0 = sorted(tier0, key = lambda item : item.price, reverse=True) sortedTier1 = sorted(tier1, key = lambda item : item.engagement, reverse=True) sortedTier2 = sorted(tier2, key = lambda item : item.engagement, reverse=True) sortedTier3 = sorted(tier3, key = lambda item : self.getViews_(item)) return combineTiers_(sortedTier0, sortedTier1, sortedTier2, sortedTier3, self.params.tier2_tier3_ratio)