bundesdata_web_app/app/speeches/views.py

122 lines
5.2 KiB
Python
Raw Normal View History

2019-02-28 13:09:53 +00:00
from django.shortcuts import render
from django_tables2 import RequestConfig
from .models import Speech, Protocol
from .tables import SpeechTable, ProtocolTable
from django.http import Http404
from .utils import create_html_speech
from .forms import SearchForm, SearchFormSpeech
from watson import search as watson
from collections import Counter
def speech(request, speech_id):
2019-03-01 19:55:41 +00:00
"""
This view creates the page of one speech.
"""
2019-02-28 13:09:53 +00:00
try:
current_speech = Speech.objects.get(pk=speech_id)
if(current_speech.previous_speech_id is not None):
previous_speech = Speech.objects.get(pk=current_speech.previous_speech_id)
previous_speech_html = create_html_speech(previous_speech.speech_content)[0]
else:
previous_speech = None
previous_speech_html = None
if(current_speech.next_speech_id is not None):
next_speech = Speech.objects.get(pk=current_speech.next_speech_id)
next_speech_html = create_html_speech(next_speech.speech_content)[0]
else:
next_speech = None
next_speech_html = None
current_speech_html, raw_text, interruptions = create_html_speech(current_speech.speech_content)
vocabulary = Counter(raw_text.split()).most_common()
unique_words = len(vocabulary)
tmp_str = []
for pair in vocabulary:
tmp_str.append("<li>{}: {}</li>".format(pair[0], pair[1]))
vocabulary = "".join(tmp_str)
except Speech.DoesNotExist:
raise Http404("Speech does not exist")
context = {"title": ("Rede "
+ " "
+ current_speech.speech_id),
"current_speech": current_speech,
"current_speech_html": current_speech_html,
"previous_speech_html": previous_speech_html,
"next_speech_html": next_speech_html,
"previous_speech": previous_speech,
"next_speech": next_speech,
"interruptions": interruptions,
"words": len(raw_text.split()),
"vocabulary": vocabulary,
"unique_words": unique_words}
return render(request, "speeches/speech.html", context)
def speeches(request):
2019-03-01 19:55:41 +00:00
"""
This view creates the searchable list of all speeches.
"""
2019-02-28 13:09:53 +00:00
if(request.method == "GET"):
form = SearchFormSpeech(request.GET)
if(form.is_valid()):
query = form.cleaned_data["query"]
search_results = watson.filter(Speech, query)
table = SpeechTable(search_results)
RequestConfig(request, paginate={'per_page': 20}).configure(table)
context = {"title": "Suchergebnisse für " + query,
"form": form, "table": table}
return render(request, "speeches/speeches.html", context)
else:
form = SearchFormSpeech()
table = SpeechTable(Speech.objects.all().order_by("speech_id"))
RequestConfig(request, paginate={'per_page': 20}).configure(table)
context = {"title": "Suche", "table": table, "form": form}
return render(request, "speeches/speeches.html", context)
def protocol(request, protocol_id):
2019-03-01 19:55:41 +00:00
"""
This view creates the page of one protocol.
"""
2019-02-28 13:09:53 +00:00
try:
current_protocol = Protocol.objects.get(pk=protocol_id)
related_speeches = Speech.objects.filter(foreign_protocol=protocol_id).order_by("speech_id")
speakers = []
speeches_html = []
for speech in related_speeches:
speakers.append(speech.foreign_speaker)
speech_html = create_html_speech(speech.speech_content)[0]
speeches_html.append(speech_html)
speaker_speech_html = zip(speakers, speeches_html, related_speeches)
except Protocol.DoesNotExist:
raise Http404("Protocol does not exist")
context = {"title": ("Protokoll " + str(current_protocol.protocol_id)),
"current_protocol": current_protocol,
"related_speeches": related_speeches,
"speeches_html": speeches_html,
"speakers": set(speakers),
"speaker_speech_html": speaker_speech_html}
return render(request, "speeches/protocol.html", context)
def protocols(request):
2019-03-01 19:55:41 +00:00
"""
This view creates the searchable list of all protocols.
"""
2019-02-28 13:09:53 +00:00
if(request.method == "GET"):
form = SearchForm(request.GET)
if(form.is_valid()):
query = form.cleaned_data["query"]
search_results = watson.filter(Protocol, query)
table = ProtocolTable(search_results)
RequestConfig(request, paginate={'per_page': 20}).configure(table)
context = {"title": "Suchergebnisse für " + query,
"form": form, "table": table}
return render(request, "speeches/protocols.html", context)
else:
form = SearchForm()
table = ProtocolTable(Protocol.objects.all().order_by("session_date"))
RequestConfig(request, paginate={'per_page': 20}).configure(table)
context = {"title": "Suche", "table": table, "form": form}
return render(request, "speeches/protocols.html", context)