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