Beispiel #1
0
 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))
Beispiel #2
0
 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()
Beispiel #3
0
 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 = {