some beauty fixes
[mlpccg-meta.git] / meta / views.py
1 from datetime import datetime
2 import json
3 from django.shortcuts import render, get_object_or_404
4 from django.template import RequestContext
5 from django.http import HttpResponse
6 from meta.models import TournamentModel, RecordModel, DeckListModel
7 from mlpccg.CardDb import CARDDB
8 from mlpccg.DeckList import DeckList
9 from mlpccg.Clustering import Clustering
10
11 def index(request):
12 tournament_models = TournamentModel.objects.all().order_by('-date')
13 tournament_data = []
14 for tournament in tournament_models:
15 tournament_records = tournament.recordmodel_set.all().order_by('placement')
16 tournament_decks = [(record.placement, DeckList(name=record.decklist.name, url=record.decklist.url)) for record in tournament_records]
17 tournament_data += [{'tournament': tournament, 'decklists': tournament_decks}]
18
19 records = RecordModel.objects.all()
20 placements = [{'decklist': DeckList(name=record.decklist.name, url=record.decklist.url), 'placement': record.placement} for record in records if record.decklist.url]
21 clustering = Clustering(records=placements)
22 ranking = [(int(avg), label, [decklist for decklist in clustering.clusters[label]]) for avg, label in clustering.ranking()]
23
24 return render(request, 'index.html', {
25 'ranking': ranking,
26 'tournaments': tournament_data
27 }, context_instance=RequestContext(request))
28
29 def tournaments_json(request):
30 return HttpResponse(json.dumps([{'name': t.name, 'id': t.id} for t in TournamentModel.objects.all()]),
31 content_type='application/json')
32
33 def tournaments_detail(request, tournament_id):
34 tournament = get_object_or_404(TournamentModel, pk=tournament_id)
35 records = [(record.placement,
36 DeckList(name=record.decklist.name, url=record.decklist.url),
37 record.verified) for record in tournament.recordmodel_set.all()]
38
39 records.sort(key=lambda x: x[0])
40
41 return render(request, 'tournament_detail.html', {
42 'records': records,
43 'tournament': tournament})
44
45 def decklists(request):
46 decklists = DeckListModel.objects.all()
47
48 return render(request, 'decklists.html', {
49 'decklists': decklists})
50
51 def decklists_detail(request, decklist_id):
52 decklist = get_object_or_404(DeckListModel, pk=decklist_id)
53
54 return render(request, 'decklists_detail.html', {
55 'decklist': decklist})
56
57 def rate(request):
58 url = request.POST.get('url', 'v1code=%s' % request.GET.get('v1code'))
59
60 decklist = DeckList(url=url)
61
62 if request.POST.get('d_name') and request.POST.get('t_date') and request.POST.get('t_name') and request.POST.get('t_placement'):
63 try:
64 tournament = TournamentModel.objects.get(name__iexact=request.POST['t_name'])
65
66 except TournamentModel.DoesNotExist:
67 tournament = TournamentModel(name=request.POST['t_name'],
68 date=datetime.strptime(request.POST['t_date'], '%Y-%m-%d'),
69 verified=False)
70 tournament.save()
71
72 decklist_model = DeckListModel(name=request.POST['d_name'], url=request.POST['url'])
73 decklist_model.save()
74
75 record = RecordModel(placement=request.POST['t_placement'],
76 tournament=tournament,
77 decklist=decklist_model,
78 verified=False)
79 record.save()
80
81 records = RecordModel.objects.all()
82 placements = [{'decklist': DeckList(name=record.decklist.name, url=record.decklist.url), 'placement': record.placement, 'record': record} for record in records if record.decklist.url]
83 clustering = Clustering(records=placements)
84 label = clustering.predict(decklist)
85
86 similiar = []
87 for placement in placements:
88 for deck in clustering.clusters[label]:
89 if placement['decklist'] == deck:
90 similiar += [(deck, placement['record'])]
91
92 return render(request, 'rate.html', {
93 'deck': decklist,
94 'similiar': similiar
95 }, context_instance=RequestContext(request))