reworking of file structure
[mlpccg-meta.git] / meta / views.py
index fc1a7af..71684b1 100644 (file)
@@ -1,5 +1,9 @@
-from django.shortcuts import render
-from meta.models import TournamentModel
+from datetime import datetime
+import json
+from django.shortcuts import render, get_object_or_404
+from django.template import RequestContext
+from django.http import HttpResponse
+from meta.models import TournamentModel, RecordModel, DeckListModel
 from mlpccg.CardDb import CARDDB
 from mlpccg.DeckList import DeckList
 from mlpccg.Clustering import Clustering
@@ -7,21 +11,85 @@ from mlpccg.Clustering import Clustering
 def index(request):
     tournament_models = TournamentModel.objects.all().order_by('-date')
     tournament_data = []
-    placements = []
     for tournament in tournament_models:
         tournament_records = tournament.recordmodel_set.all().order_by('placement')
-        tournament_decks = []
-        for record in tournament_records:
-            decklist = DeckList(name=record.decklist.name, url=record.decklist.url)
-            tournament_decks += [decklist]
-            if len(decklist.cards) > 0:
-                placements += [{'decklist': decklist, 'placement': record.placement}]
-
+        tournament_decks = [(record.placement, DeckList(name=record.decklist.name, url=record.decklist.url)) for record in tournament_records]
         tournament_data += [{'tournament': tournament, 'decklists': tournament_decks}]
 
+    records = RecordModel.objects.all()
+    placements = [{'decklist': DeckList(name=record.decklist.name, url=record.decklist.url), 'placement': record.placement} for record in records if record.decklist.url]
     clustering = Clustering(records=placements)
-    ranking = [(int(avg), label, [decklist for decklist in clustering.clusters[label]]) for avg, label in clustering.ranking()]
+    ranking = [(int(avg), label, clustering.clusters[label]) for avg, label in clustering.ranking()]
 
     return render(request, 'index.html', {
         'ranking': ranking,
-        'tournaments': tournament_data})
+        'tournaments': tournament_data
+    }, context_instance=RequestContext(request))
+
+def tournaments_json(request):
+    return HttpResponse(json.dumps([{'name': t.name, 'id': t.id} for t in TournamentModel.objects.all()]),
+                        content_type='application/json')
+
+def tournaments_detail(request, tournament_id):
+    tournament = get_object_or_404(TournamentModel, pk=tournament_id)
+    records = [(record.placement,
+                DeckList(name=record.decklist.name, url=record.decklist.url),
+                record.verified) for record in tournament.recordmodel_set.all()]
+
+    records.sort(key=lambda x: x[0])
+
+    return render(request, 'tournament_detail.html', {
+        'records': records,
+        'tournament': tournament})
+
+def decklists(request):
+    decklists = DeckListModel.objects.all()
+
+    return render(request, 'decklists.html', {
+        'decklists': decklists})
+
+def decklists_detail(request, decklist_id):
+    decklist = get_object_or_404(DeckListModel, pk=decklist_id)
+
+    return render(request, 'decklists_detail.html', {
+        'decklist': decklist})
+
+def rate(request):
+    url = request.POST.get('url', 'v1code=%s' % request.GET.get('v1code'))
+
+    decklist = DeckList(url=url)
+
+    if request.POST.get('d_name') and request.POST.get('t_date') and request.POST.get('t_name') and request.POST.get('t_placement'):
+        try:
+            tournament = TournamentModel.objects.get(name__iexact=request.POST['t_name'])
+
+        except TournamentModel.DoesNotExist:
+            tournament = TournamentModel(name=request.POST['t_name'],
+                                         date=datetime.strptime(request.POST['t_date'], '%Y-%m-%d'),
+                                         verified=False)
+            tournament.save()
+
+        decklist_model = DeckListModel(name=request.POST['d_name'], url=request.POST['url'])
+        decklist_model.save()
+
+        record = RecordModel(placement=request.POST['t_placement'],
+                             tournament=tournament,
+                             decklist=decklist_model,
+                             verified=False)
+        record.save()
+
+    records = RecordModel.objects.all()
+    placements = [{'decklist': DeckList(name=record.decklist.name, url=record.decklist.url), 'placement': record.placement, 'record': record} for record in records if record.decklist.url]
+    clustering = Clustering(records=placements)
+    label = clustering.predict(decklist)
+
+    similiar = []
+    for placement in placements:
+        for deck in clustering.clusters[label]:
+            if placement['decklist'] == deck:
+                similiar += [(deck, placement['record'])]
+
+    return render(request, 'rate.html', {
+        'deck': decklist,
+        'similiar': similiar
+    }, context_instance=RequestContext(request))