borg-web/borgweb/borg/views.py

93 lines
3.2 KiB
Python

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponseRedirect
from .models import Repo, Label, Archive, Cache, Error
from django.urls import reverse
from .forms import RepoForm, ArchiveForm, ErrorForm
from django.contrib.auth.decorators import permission_required
def index(request):
repo_list = Repo.objects.all()
hour_list = [repo.get_archive_hours_dict() for repo in repo_list]
context = {
'repo_list': repo_list,
'hour_list': hour_list
}
return render(request, 'borg/index.html', context)
@permission_required("borg.add_repo")
def get_repo(request):
if request.method == 'POST':
form = RepoForm(request.POST)
if form.is_valid():
cdata = form.cleaned_data
repo_query = Repo.objects.all().filter(fingerprint=cdata['fingerprint'])
if len(repo_query) > 0:
label = repo_query[0].label
label.label = cdata['label']
label.save()
label, _ = Label.objects.get_or_create(label=cdata['label'])
label.save()
repo, repo_exists = Repo.objects.update_or_create(fingerprint=cdata['fingerprint'],
defaults={'location': cdata['location'],
'last_modified': cdata['last_modified'],
'label': label})
repo.save()
return HttpResponseRedirect(reverse('index'))
else:
form = RepoForm()
return render(request, 'borg/repo.html', {'form': form})
@permission_required("borg.add_archive")
def get_archive(request):
if request.method == 'POST':
form = ArchiveForm(request.POST)
if form.is_valid():
cdata = form.cleaned_data
repo = get_object_or_404(Repo, label__label=cdata['label'])
cache_dict = {k: cdata[k] for k in ('total_chunks', 'total_csize', 'total_size',
'total_unique_chunks', 'unique_csize', 'unique_size')}
cache = Cache(**cache_dict)
cache.save()
archive_dict = {k: cdata[k] for k in ('fingerprint', 'name', 'start', 'end', 'file_count',
'original_size', 'compressed_size', 'deduplicated_size')}
archive = Archive(**archive_dict, repo=repo, cache=cache)
archive.save()
return HttpResponseRedirect(reverse('index'))
else:
form = ArchiveForm()
return render(request, 'borg/archive.html', {'form': form})
@permission_required("borg.add_error")
def get_error(request):
if request.method == 'POST':
form = ErrorForm(request.POST)
if form.is_valid():
cdata = form.cleaned_data
label, _ = Label.objects.get_or_create(label=cdata['label'])
error = Error(label=label, error=cdata['error'], time=cdata['time'])
error.save()
return HttpResponseRedirect(reverse('index'))
else:
form = ErrorForm()
return render(request, 'borg/error.html', {'form': form})