def get_current_level(): level = memcache.get('level') if level is None: now = datetime.datetime.now() #level = Level.all().filter('time <=', now).filter('time >=', now - datetime.timedelta(seconds = GAME_LENGTH + HIGHSCORE_LENGTH)).get() #memcache.set('level', level) level = Level.all().get() return level
def get(self, version): logging.debug("LevelsListHandler#get") if (self.valid_version(version)): self.json({"levels": Level.all()}) else: self.error(404, "API Version %s not supported" % version)
async def read(): return await PydanticLevel.from_queryset(Level.all())
def run(self): # global statistics gs = {} gs['users'] = User.count({'active': True}) # FIXME: remove beta levels gs['achievements'] = Achievement.count() gs['expired_coupons'] = Coupon.count({ 'validations_left': 0, }) gs['coupons'] = Coupon.count() gs['level_bought'] = OrganizationLevel.count() gs['level_finished'] = OrganizationLevel.count({ 'status': { '$in': ['pending validation', 'validated'], }, }) gs['levels'] = Level.count() gs['organization_achievements'] = OrganizationAchievement.count() gs['organization_coupons'] = OrganizationCoupon.count() gs['organizations'] = Organization.count() last_record = GlobalStatistics.last_record() if not last_record or not all(item in last_record.items() for item in gs.items()): GlobalStatistics.post_internal(gs) # level statistics levels = mongo_list_to_dict(Level.all()) for level in levels.values(): amount_bought = OrganizationLevel.count({ 'level': level['_id'], }) # FIXME: filter, only 1 by organization amount_finished = OrganizationLevel.count({ 'level': level['_id'], 'status': { '$in': ['pending validation', 'validated'], }, }) level['amount_bought'] = amount_bought LevelStatistics.update_by_id( level['statistics'], { '$set': { 'amount_bought': amount_bought, 'amount_finished': amount_finished, # FIXME: fivestar average # FIXME: duration average # FIXME: amount hints bought }, }) sessions = Session.all() for session in sessions: organization_levels = OrganizationLevel.find({ 'session': session['_id'], }) organizations = mongo_list_to_dict( Organization.find({ 'session': session['_id'], })) validations = OrganizationLevelValidation.all() for validation in validations: if validation['status'] == 'refused': continue organization = organizations.get(validation['organization']) if not organization: continue level = levels.get(validation['level']) if not level: continue level['validations'] = level.get('validations', 0) defaults = { 'validated_levels': [], 'gold_medals': 0, 'silver_medals': 0, 'bronze_medals': 0, } for key, value in defaults.items(): if key not in organization: organization[key] = value if level['validations'] == 0: organization['gold_medals'] += 1 elif level['validations'] == 1: organization['silver_medals'] += 1 elif level['validations'] == 2: organization['bronze_medals'] += 1 organization['validated_levels'].append(level['_id']) level['validations'] += 1 for organization in organizations.values(): coupons = OrganizationCoupon.count({ 'organization': organization['_id'], }) achievements = OrganizationAchievement.count({ 'organization': organization['_id'], }) validated_levels = list( set(organization.get('validated_levels', []))) score = 0 score += organization.get('gold_medals', 0) * 9 score += organization.get('silver_medals', 0) * 5 score += organization.get('bronze_medals', 0) * 2 score += len(validated_levels) * 10 score += achievements * 2 for validated_level in validated_levels: level = levels[validated_level] percent = float(level['validations']) / float( level['amount_bought']) score += int(round(-math.log(percent) * 2)) OrganizationStatistics.update_by_id( organization['statistics'], { '$set': { 'coupons': coupons, 'score': score, 'achievements': achievements, 'gold_medals': organization.get('gold_medals', 0), 'silver_medals': organization.get('silver_medals', 0), 'bronze_medals': organization.get('bronze_medals', 0), 'finished_levels': len(validated_levels), 'bought_levels': OrganizationLevel.count({ 'organization': organization['_id'], }) }, })