-
Notifications
You must be signed in to change notification settings - Fork 25
Tournament Data Export + Tab Card Refactor #346
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
a4d86c0
45569f8
bd9911c
844a428
19dd796
47d3b7b
acc7369
fe2fc5d
e4d9729
097040d
bc31a65
0cc33a7
6ed827b
8f9e6fe
e21029e
f771277
6a11683
df5c0d5
18d98d9
c12c9dc
66b4b81
1db7e15
e925af8
e7c7994
c766387
bd3307f
06ba62e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -1,17 +1,33 @@ | ||||||
| import os | ||||||
| import csv | ||||||
| import json | ||||||
| import io | ||||||
| from django.db import IntegrityError | ||||||
| from django.contrib.auth.decorators import permission_required | ||||||
| from django.contrib.auth import logout | ||||||
| from django.conf import settings | ||||||
| from django.http import HttpResponse, JsonResponse | ||||||
| from django.http import HttpResponse, JsonResponse, HttpResponseBadRequest | ||||||
| from django.shortcuts import render, redirect, reverse | ||||||
| from django.core.management import call_command | ||||||
| import yaml | ||||||
|
|
||||||
| from mittab.apps.tab.archive import ArchiveExporter | ||||||
| from mittab.libs.data_export.tab_card import ( | ||||||
| JSONDecimalEncoder, | ||||||
| csv_tab_cards, | ||||||
| get_all_json_data, | ||||||
| ) | ||||||
| from mittab.libs.data_export.xml_archive import ArchiveExporter | ||||||
| from mittab.apps.tab.views.debater_views import get_speaker_rankings | ||||||
| from mittab.apps.tab.forms import MiniRoomTagForm, RoomTagForm, SchoolForm, RoomForm, \ | ||||||
| UploadDataForm, ScratchForm, SettingsForm | ||||||
| from mittab.apps.tab.forms import ( | ||||||
| ExportFormatForm, | ||||||
| MiniRoomTagForm, | ||||||
| RoomTagForm, | ||||||
| SchoolForm, | ||||||
| RoomForm, | ||||||
| UploadDataForm, | ||||||
| ScratchForm, | ||||||
| SettingsForm, | ||||||
| ) | ||||||
| from mittab.apps.tab.helpers import redirect_and_flash_error, \ | ||||||
| redirect_and_flash_success | ||||||
| from mittab.apps.tab.models import * | ||||||
|
|
@@ -24,6 +40,7 @@ | |||||
| from mittab.libs.data_import import import_judges, import_rooms, import_teams, \ | ||||||
| import_scratches | ||||||
| from mittab.libs.tab_logic.rankings import get_team_rankings | ||||||
| from mittab.libs.data_export.s3_connector import schedule_results_export | ||||||
|
|
||||||
|
|
||||||
| def index(request): | ||||||
|
|
@@ -491,6 +508,81 @@ def upload_data(request): | |||||
| }) | ||||||
|
|
||||||
|
|
||||||
| def _get_tournament_name(request): | ||||||
| return request.META["SERVER_NAME"].split(".")[0] | ||||||
|
Comment on lines
+511
to
+512
|
||||||
|
|
||||||
|
|
||||||
| def _dispatch_tournament_export(request, fmt): | ||||||
| tournament_name = _get_tournament_name(request) | ||||||
| if fmt == "json": | ||||||
| return tab_cards_json(request, tournament_name) | ||||||
| if fmt == "csv": | ||||||
| return tab_cards_csv(request, tournament_name) | ||||||
| if fmt == "xml": | ||||||
| return xml_archive(request, tournament_name) | ||||||
| return HttpResponseBadRequest("Invalid format.") | ||||||
|
|
||||||
|
|
||||||
| @permission_required("tab.tab_settings.can_change", login_url="/403/") | ||||||
| def export_tournament(request, format=None): | ||||||
| if format is not None: | ||||||
| return _dispatch_tournament_export(request, format.lower()) | ||||||
|
|
||||||
| if request.method == "POST": | ||||||
| form = ExportFormatForm(request.POST) | ||||||
| if form.is_valid(): | ||||||
| fmt = form.cleaned_data["format"] | ||||||
| return _dispatch_tournament_export(request, fmt) | ||||||
| else: | ||||||
| form = ExportFormatForm(initial={"format": "csv"}) | ||||||
|
|
||||||
| return render( | ||||||
| request, | ||||||
| "common/data_entry.html", | ||||||
| { | ||||||
| "form": form, | ||||||
| "title": "Export Tournament", | ||||||
| "custom_submit": "Export" | ||||||
| }) | ||||||
|
|
||||||
|
|
||||||
| @permission_required("tab.tab_settings.can_change", login_url="/403/") | ||||||
| def tab_cards_json(request, tournament_name): | ||||||
| json_data = json.dumps( | ||||||
| {"tab_cards": get_all_json_data()}, | ||||||
| indent=4, | ||||||
| cls=JSONDecimalEncoder, | ||||||
| ) | ||||||
| response = HttpResponse(json_data, content_type="application/json") | ||||||
| response["Content-Disposition"] = f"attachment; filename={tournament_name}.json" | ||||||
| return response | ||||||
|
|
||||||
|
|
||||||
| @permission_required("tab.tab_settings.can_change", login_url="/403/") | ||||||
| def tab_cards_csv(request, tournament_name): | ||||||
| response = HttpResponse(content_type="text/csv") | ||||||
| response["Content-Disposition"] = f"attachment; filename={tournament_name}.csv" | ||||||
| buffer = io.StringIO(newline="") | ||||||
|
||||||
| buffer = io.StringIO(newline="") | |
| buffer = io.StringIO() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing blank line before class definition. According to PEP 8, there should be two blank lines before top-level class definitions. Add a blank line before
class ExportFormatForm.