neue Verzeichnissstruktur
This commit is contained in:
@@ -1,83 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
'''
|
||||
Created on 23.05.2011
|
||||
|
||||
@author: christian
|
||||
'''
|
||||
from django.core.cache import cache
|
||||
from django.db import transaction
|
||||
from mahjong_ranking import models
|
||||
from . import logger
|
||||
|
||||
|
||||
class DenormalizationUpdateMiddleware(object):
|
||||
'''
|
||||
This Class deferres the recalculation for the Otaku XP at the end of a
|
||||
response.
|
||||
'''
|
||||
|
||||
def process_response(self, request, response):
|
||||
if request.method != 'POST':
|
||||
# We only do this in POST request, to speedup the responsetime.
|
||||
return response
|
||||
|
||||
# Start an SQL Transaction
|
||||
transaction.enter_transaction_management()
|
||||
transaction.managed(True)
|
||||
|
||||
# recalculate tournament (event) rankings:
|
||||
event_ranking_queue = cache.get('event_ranking_queue', set())
|
||||
if len(event_ranking_queue) > 0:
|
||||
while len(event_ranking_queue) > 0:
|
||||
event_id, user_id = event_ranking_queue.pop()
|
||||
logger.info("recalculate %d tournament Ranking in %s", user_id, event_id)
|
||||
ranking = models.EventRanking.objects.get_or_create(
|
||||
event_id=event_id, user_id=user_id)[0]
|
||||
ranking.recalculate()
|
||||
self.recalculate_event_placement(event_id)
|
||||
cache.set('event_ranking_queue', event_ranking_queue, 360)
|
||||
transaction.commit()
|
||||
|
||||
# recalculate dirty kyu/dan rankings:
|
||||
kyu_dan_ranking_queue = cache.get('kyu_dan_ranking_queue', set())
|
||||
while len(kyu_dan_ranking_queue) > 0:
|
||||
user_id = kyu_dan_ranking_queue.pop()
|
||||
ranking = models.KyuDanRanking.objects.get_or_create(
|
||||
user_id=user_id)[0]
|
||||
ranking.recalculate()
|
||||
cache.set('kyu_dan_ranking_queue', kyu_dan_ranking_queue, 360)
|
||||
transaction.commit()
|
||||
|
||||
# Recaluclate Dirty LadderRankings:
|
||||
ladder_ranking_queue = cache.get('ladder_ranking_queue', set())
|
||||
while len(ladder_ranking_queue) > 0:
|
||||
season_id, user_id = ladder_ranking_queue.pop()
|
||||
if season_id and user_id:
|
||||
ranking = models.LadderRanking.objects.get_or_create(
|
||||
user_id=user_id, season_id=season_id)[0]
|
||||
ranking.recalculate()
|
||||
else:
|
||||
logger.error('Season: %i; User %i - existiert nicht!', season_id, user_id)
|
||||
cache.set('ladder_ranking_queue', ladder_ranking_queue, 360)
|
||||
transaction.commit()
|
||||
|
||||
# Recaluclate Dirty Season Placements:
|
||||
ladder_season_queue = cache.get('ladder_season_queue', set())
|
||||
for season_id in ladder_season_queue:
|
||||
season = models.LadderSeason.objects.get_or_create(pk=season_id)[0]
|
||||
season.recalculate()
|
||||
cache.set('ladder_season_queue', ladder_season_queue, 360)
|
||||
transaction.commit()
|
||||
|
||||
transaction.leave_transaction_management()
|
||||
return response
|
||||
|
||||
def recalculate_event_placement(self, event_id):
|
||||
eventranking_set = models.EventRanking.objects.filter(
|
||||
event_id=event_id).order_by('avg_placement', '-avg_score')
|
||||
eventranking_set.update(placement=None)
|
||||
placement = 1
|
||||
for ranking in eventranking_set:
|
||||
ranking.placement = placement
|
||||
placement += 1
|
||||
ranking.save(force_update=True)
|
||||
Reference in New Issue
Block a user