def post(self): stage = self.request.get('stage') c = ndb.Cursor(urlsafe=self.request.get('cursor')) if stage == 'hash': games, curs, more = GameHistory.query().fetch_page(10, start_cursor=c) map(self.handle_game, games) if len(games) > 0 and more and curs: taskqueue.add(url='/remove_duplicates', params={'stage': 'hash', 'cursor': curs.urlsafe()}, queue_name='fast') elif stage == 'mark': game, curs, more = GameHistory.query().fetch_page(1, start_cursor=c) game = game[0] if game is None: self.abort(200) if not game.ignored or game.hash is None: duplicates = GameHistory.query(GameHistory.hash == game.hash).fetch() duplicates.sort(key=lambda el: el.key.id()) duplicates.pop() for el in duplicates: el.ignored = True ndb.put_multi(duplicates) if more and curs: taskqueue.add(url='/remove_duplicates', params={'stage': 'mark', 'cursor': curs.urlsafe()}, queue_name='fast') elif stage == 'remove': ndb.delete_multi(GameHistory.query(GameHistory.ignored == True).fetch(keys_only=True))
def post(self): self.stage = int(self.request.get('stage', 1)) self.start_cursor = ndb.Cursor(urlsafe=self.request.get('cursor')) queue = taskqueue.Queue('logs-processing') if self.stage == 1: RecalcAllLogs.delete_all_stat() self.next_stage() self.abort(200) elif self.stage == 2: words = self.fetch_portion(GlobalDictionaryWord.query(GlobalDictionaryWord.used_times > 0)) for fut in map(self.reset_word, words): fut.get_result() elif self.stage == 3: logs = self.fetch_portion(GameLog.query()) for el in logs: if not el.ignored: el.ignored = False el.put() elif self.stage == 4: map(lambda k: queue.add_async(taskqueue.Task(url='/internal/add_game_to_statistic', params={'game_key': k.urlsafe()})), self.fetch_portion(GameLog.query(GameLog.ignored == False), keys_only=True)) elif self.stage == 5: map(lambda k: queue.add_async(taskqueue.Task(url='/internal/add_game_to_statistic', params={'game_key': k.urlsafe()})), self.fetch_portion(GameHistory.query(GameHistory.ignored == False), keys_only=True)) if self.more and self.cursor: self.next_portion() else: self.next_stage()
def post(self): self.stage = int(self.request.get('stage', 1)) self.start_cursor = ndb.Cursor(urlsafe=self.request.get('cursor')) queue = taskqueue.Queue('logs-processing') if self.stage == 1: RecalcAllLogs.delete_all_stat() self.next_stage() self.abort(200) elif self.stage == 2: words = self.fetch_portion( GlobalDictionaryWord.query( GlobalDictionaryWord.used_times > 0)) for fut in map(self.reset_word, words): fut.get_result() elif self.stage == 3: logs = self.fetch_portion(GameLog.query()) for el in logs: if not el.ignored: el.ignored = False el.put() elif self.stage == 4: map( lambda k: queue.add_async( taskqueue.Task(url='/internal/add_game_to_statistic', params={'game_key': k.urlsafe()})), self.fetch_portion(GameLog.query(GameLog.ignored == False), keys_only=True)) elif self.stage == 5: map( lambda k: queue.add_async( taskqueue.Task(url='/internal/add_game_to_statistic', params={'game_key': k.urlsafe()})), self.fetch_portion( GameHistory.query(GameHistory.ignored == False), keys_only=True)) if self.more and self.cursor: self.next_portion() else: self.next_stage()
17: 'timed-out', 23: 'timed-out', 42: 'guessed', 31: 'guessed', 35: 'timed-out', 2: 'guessed', 41: 'failed' } PARSED_LOG = json.loads(LOG_JSON) WORDS = [el['word'] for el in PARSED_LOG['setup']['words']] EXPECTED_RATES = [ [41, 42, 38, 31], #of pair (0,1) [2, 21, 42, 38, 31] #overall ] HISTORY = GameHistory(guess_results=[ WordGuessResult(result=a, round_=b, time_sec=c, word=d) for a, b, c, d in zip([3L, 3L, 3L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 3L], [0L, 1L, 2L, 3L, 4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L], [ 20.000975847244263, 20.01230001449585, 20.02179503440857, 14.53020191192627, 9.769454002380371, 20.000168800354004, 4.209316968917847, 12.527299165725708, 19.002864122390747, 7.204860925674438, 17.94984197616577, 20.022836923599243 ], [3L, 22L, 24L, 4L, 3L, 10L, 34L, 24L, 23L, 30L, 2L, 20L]) ], rounds=[ Round(player_explain=a, player_guess=b) for a, b in zip([0L, 1L, 0L, 1L, 0L, 1L, 0L], [1L, 0L, 1L, 0L, 1L, 0L, 1L]) ], words=[Word(text="word{}".format(i)) for i in range(35)]) H_EXPECTED_TIME = {