145 lines
4.4 KiB
Python
145 lines
4.4 KiB
Python
import json
|
|
from pathlib import Path
|
|
from typing import Dict, List, Set
|
|
|
|
from django.http.response import JsonResponse
|
|
from django.http.response import HttpResponse
|
|
# from django.shortcuts import render
|
|
from django.shortcuts import redirect
|
|
from django.views.generic import TemplateView, View
|
|
|
|
from . import models
|
|
from . import services
|
|
|
|
# Create your views here.
|
|
|
|
|
|
def favicon(request):
|
|
b = (Path('.')/'templates'/'favicon.ico').read_bytes()
|
|
return HttpResponse(b, content_type='image/x-icon')
|
|
|
|
|
|
class Root(TemplateView):
|
|
template_name = 'index.html'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context["requested_reports"] = models.RequestedReport.objects.order_by(
|
|
'-id')[:10].all()
|
|
return context
|
|
|
|
def post(self, request):
|
|
urls_s = request.POST.get('urls', '')
|
|
urls = list(filter(len, map(str.strip, urls_s.splitlines())))
|
|
depth = int(request.POST.get('depth', '0'))
|
|
return redirect('work', 0, depth, '\r\n'.join(urls).encode('utf-8').hex(), permanent=False)
|
|
|
|
|
|
class FullList(TemplateView):
|
|
template_name = 'full_list.html'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context["requested_reports"] = models.RequestedReport.objects.order_by(
|
|
'-id').all()
|
|
return context
|
|
|
|
|
|
class Work(View):
|
|
def get(self, request, after: int, depth: int, hexurls: str):
|
|
nxt = ['index', 'api'][after]
|
|
urls = list(filter(len, map(str.strip, bytes.fromhex(
|
|
hexurls).decode('utf-8').splitlines())))
|
|
services.AccessibilityCheckerService().assess_many(
|
|
urls,
|
|
depth
|
|
)
|
|
return redirect(nxt)
|
|
|
|
|
|
class Details(TemplateView):
|
|
template_name = 'details.html'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context["requested_report"] = models.RequestedReport.objects.filter(
|
|
pk=context['pk']).first()
|
|
return context
|
|
|
|
|
|
class FullLines(TemplateView):
|
|
template_name = 'full_lines.html'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context["page_report"] = models.PageReport.objects.filter(
|
|
pk=context['pk']).first()
|
|
return context
|
|
|
|
|
|
def model_to_json_simple(m):
|
|
j = {**m.__dict__}
|
|
del j['_state']
|
|
return j
|
|
|
|
|
|
def replace_id_for_model(m, j, l):
|
|
del j[f'{l}_id']
|
|
j[l] = model_to_json_simple(getattr(m, l, {}))
|
|
|
|
|
|
class ApiAll(View):
|
|
def get(self, request):
|
|
x = list()
|
|
for i in models.RequestedReport.objects.order_by('-id').all():
|
|
d = model_to_json_simple(i)
|
|
d['reports'] = list(map(lambda a: a.pk, i.reports.all()))
|
|
x.append(d)
|
|
return JsonResponse(x, safe=False)
|
|
|
|
|
|
class ApiDetails(View):
|
|
def get(self, request, pk):
|
|
j = models.RequestedReport.objects.filter(pk=pk).first()
|
|
e = model_to_json_simple(j)
|
|
e['reports'] = list()
|
|
for i in j.reports.all():
|
|
d = model_to_json_simple(i)
|
|
replace_id_for_model(i, d, 'url')
|
|
e['reports'].append(d)
|
|
return JsonResponse(e, safe=False)
|
|
|
|
|
|
class ApiDetailsFull(View):
|
|
def get(self, request, pk):
|
|
j = models.RequestedReport.objects.filter(pk=pk).first()
|
|
e = model_to_json_simple(j)
|
|
e['reports'] = list()
|
|
for i in j.reports.all():
|
|
d = model_to_json_simple(i)
|
|
replace_id_for_model(i, d, 'url')
|
|
d['lines'] = list()
|
|
e['reports'].append(d)
|
|
for k in i.lines.all():
|
|
f = model_to_json_simple(k)
|
|
replace_id_for_model(k, f, 'subject_of_concern')
|
|
replace_id_for_model(k, f, 'generator')
|
|
replace_id_for_model(k, f, 'pattern')
|
|
d['lines'].append(f)
|
|
return JsonResponse(e, safe=False)
|
|
|
|
|
|
class ApiLines(View):
|
|
def get(self, request, ppk, pk):
|
|
j = models.PageReport.objects.filter(pk=pk).first()
|
|
e = model_to_json_simple(j)
|
|
replace_id_for_model(j, e, 'url')
|
|
e['lines'] = list()
|
|
for i in j.lines.all():
|
|
d = model_to_json_simple(i)
|
|
replace_id_for_model(i, d, 'subject_of_concern')
|
|
replace_id_for_model(i, d, 'generator')
|
|
replace_id_for_model(i, d, 'pattern')
|
|
e['lines'].append(d)
|
|
return JsonResponse(e, safe=False)
|