def get(self): members = Member.query(Member.active == True).order(Member.username) #Identify the slackers for future shaming double_list = [] kill_tracker = [] for person in members: if person.double < 0: double_list.append(person) kill_list = person.kill_list logging.debug("Type of kill_list: " + str(type(kill_list))) kills7 = sum(kill_list[23:]) kills14 = sum(kill_list[16:]) kills30 = sum(kill_list) kill_dict = { 'name': person.username, 'kills7': kills7, 'kills14': kills14, 'kills30': kills30 } kill_tracker.append(kill_dict) template = JINJA_ENVIRONMENT.get_template('admin.html') self.response.write( template.render(kills=kill_tracker, double=double_list))
def get(self): root_url = 'https://lyrania.co.uk/api/accounts/public_profile.php?' memberlist = [] members = Member.query(Member.active == True).order(Member.username) for member in members: #Form URL params = {'search': str(member.key.id())} encoded_params = urllib.urlencode(params) url = root_url + encoded_params #Fetch request and format response response = urlfetch.fetch(url=url, validate_certificate=True) result = json.loads(response.content) list_addition = [result] memberlist = memberlist + list_addition #Do stuff with the database HERE member.username = result['name'] member.level = int(result['level']) member.quests = int(result['quests_complete']) member.base_stats = int(result['base_stats']) member.dp = int(result['earned_dp']) if result['guild_name'] != 'Phoenix': member.active = False member.put() #Write return template = JINJA_ENVIRONMENT.get_template('stats.html') self.response.write(template.render(data=memberlist))
def post(self): action = self.request.get('action') logging.info("Admin action: " + action) if action == "newcontest": contest_name = self.request.get('contestname') start_date = self.parseDate(str(self.request.get('startdate'))) end_date = self.parseDate(str(self.request.get('enddate'))) #If dates could not be parsed, return error. if start_date is None or end_date is None: result = "Invalid date parameters: Please use DD-MM-YYYY or YYYY-MM-DD" #Else proceed with database update. else: #Get a list of current members. API call unnecessary since baseline GDP won't be calculated until contest starts. members = Member.query(Member.active == True).order( Member.username) score_list = [] #Set up a ContestScore entity for each member for person in members: new_score = ContestScore(member_id=person.key.id(), member_name=person.username, start_gdp=0, current_gdp=0) score_list = score_list + [new_score] #Create new Contest new_contest = Contest(active=False, name=contest_name, start=start_date, end=end_date, scores=score_list) new_contest.put() result = "Contest " + new_contest.name + " successfully created!" else: logging.warning("Admin action: Unable to resolve action type!") result = "Error: Unknown action" #Output template = JINJA_ENVIRONMENT.get_template('admin_submit.html') self.response.write(template.render(info=result))
def get(self): logging.info("Starting maintenance job...") #Form URL url = 'https://lyrania.co.uk/api/guilds/member_list.php?' params = {'api_code': GUILD_SECRET} encoded_params = urllib.urlencode(params) url = url + encoded_params #Fetch request and format response response = urlfetch.fetch(url=url, validate_certificate=True) result = json.loads(response.content) contest_additions = [] #[START UPDATE GUILD CONTRIBUTIONS] for member in result['members']: #Attempt to fetch this member from the DB candidate_key = try_key(member['id']) entry = candidate_key.get() #If member not found, create a new one and set aside for addition to ongoing contests if entry is None: logging.info("New member detected: " + member['username']) kill_tracker = [] for x in xrange(0, 29): kill_tracker.append(0) kill_tracker.append( int(member['kills']['kills']) - int(member['kills']['yesterdays_kills'])) infant_member = Member( id=member['id'], username=member['username'], rank="0", active=True, level=int(member['level']), kills=int(member['kills']['kills']), quests=0, base_stats=0, buffed_stats=0, dp=0, xp=int(member['donations']['exp_donated']), xp_prev=0, food=int(member['donations']['food']), food_prev=0, stone=int(member['donations']['stone']), stone_prev=0, iron=int(member['donations']['iron']), iron_prev=0, lumber=int(member['donations']['lumber']), lumber_prev=0, gems=int(member['donations']['gems']), gems_prev=0, money=int(member['donations']['money']), money_prev=0, jade=int(member['donations']['jade']), jade_prev=0, double=int(member['donations']['double']), gdp=int(member['gdp']['dp']), gdp_prev=0, gdp_spent=int(member['gdp']['dp_spent']), gdp_spent_prev=0, weekly_gdp=int(member['gdp']['weekly_dp']), last_weekly_gdp=int(member['gdp']['last_weekly_dp']), rp=int(member['rp']['donated']), rp_prev=0, chc=0, chd=0, heroism=0, leadership=0, archaeology=0, jc=0, serendipity="", epeen=0, w1=0, w2=0, a1=0, a2=0, a3=0, a4=0, a5=0, a6=0, a7=0, kill_list=kill_tracker) infant_member.put() new_member = [member['id']] contest_additions = contest_additions + new_member #Otherwise, update the existing entry else: entry.username = member['username'] entry.active = True entry.level = int(member['level']) entry.kills = int(member['kills']['kills']) entry.xp = int(member['donations']['exp_donated']) entry.food = int(member['donations']['food']) entry.stone = int(member['donations']['stone']) entry.iron = int(member['donations']['iron']) entry.lumber = int(member['donations']['lumber']) entry.gems = int(member['donations']['gems']) entry.money = int(member['donations']['money']) entry.jade = int(member['donations']['jade']) entry.double = int(member['donations']['double']) entry.gdp = int(member['gdp']['dp']) entry.gdp_spent = int(member['gdp']['dp_spent']) entry.weekly_gdp = int(member['gdp']['weekly_dp']) entry.last_weekly_gdp = int(member['gdp']['last_weekly_dp']) entry.rp = int(member['rp']['donated']) kill_tracker = entry.kill_list yesterdays_kills = int(member['kills']['kills']) - int( member['kills']['yesterdays_kills']) kill_tracker.append(yesterdays_kills) kill_tracker = kill_tracker[1:] entry.kill_list = kill_tracker #Update the database entry.put() #[END UPDATE GUILD CONTRIBUTIONS] #[START UPDATE STATS] root_url = 'https://lyrania.co.uk/api/accounts/public_profile.php?' memberlist = [] members = Member.query(Member.active == True).order(Member.username) for person in members: #Form URL params = {'search': str(person.key.id())} encoded_params = urllib.urlencode(params) url = root_url + encoded_params #Fetch request and format response response = urlfetch.fetch(url=url, validate_certificate=True) result = json.loads(response.content) list_addition = [result] memberlist = memberlist + list_addition #Do stuff with the database HERE person.username = result['name'] person.level = int(result['level']) person.quests = int(result['quests_complete']) person.base_stats = int(result['base_stats']) person.dp = int(result['earned_dp']) #If no longer a member, inactivate and store off previous stats if result['guild_name'] != 'Phoenix': logging.info("Member no longer in guild: " + person.username) person.active = False person.xp_prev = person.xp person.money_prev = person.money person.jade_prev = person.jade person.gems_prev = person.gems person.food_prev = person.food person.iron_prev = person.iron person.stone_prev = person.stone person.lumber_prev = person.lumber person.gdp_prev = person.gdp person.gdp_spent_prev = person.gdp_spent person.rp_prev = person.rp person.put() #[END UPDATE STATS] #[START UPDATE CONTESTS] #Get today and also yesterday, since contests up until yesterday are relevant today = datetime.date.today() date_adjust = datetime.timedelta(days=-1) yesterday = today + date_adjust contest_list = Contest.query(Contest.end >= yesterday) if contest_list is None: logging.info("No active contests") else: for item in contest_list: logging.info("Updating contest: " + item.name) if item.start <= today and item.end >= today: item.active = True else: item.active = False for score in item.scores: candidate_key = try_key(score.member_id) this_member = candidate_key.get() if this_member is not None: score.current_gdp = this_member.gdp score.member_name = this_member.username if item.start == today: score.start_gdp = this_member.gdp else: logging.warning("Unable to retrieve member: " + score.member_name) for addition in contest_additions: candidate_key = try_key(addition) entity = candidate_key.get() if entity is not None: new_score = ContestScore(member_id=entity.key.id(), member_name=entity.username, start_gdp=entity.gdp, current_gdp=entity.gdp) item.scores = item.scores + [new_score] else: logging.warning("Unable to add contest addition: " + str(addition)) item.put()