From 194afd9c66b7573637018741a4db5ba2fb2f4328 Mon Sep 17 00:00:00 2001 From: George Lacey Date: Fri, 7 May 2021 20:24:06 +0100 Subject: [PATCH] Create archive form --- borgweb/borg/forms/__init__.py | 1 + borgweb/borg/forms/archiveform.py | 20 ++++++++++++++ borgweb/borg/templates/borg/archive.html | 14 ++++++++++ borgweb/borg/urls.py | 3 +- borgweb/borg/views.py | 35 +++++++++++++++++++++--- 5 files changed, 68 insertions(+), 5 deletions(-) create mode 100644 borgweb/borg/forms/archiveform.py create mode 100644 borgweb/borg/templates/borg/archive.html diff --git a/borgweb/borg/forms/__init__.py b/borgweb/borg/forms/__init__.py index f40c618..7e19013 100644 --- a/borgweb/borg/forms/__init__.py +++ b/borgweb/borg/forms/__init__.py @@ -1 +1,2 @@ from .repoform import RepoForm +from .archiveform import ArchiveForm diff --git a/borgweb/borg/forms/archiveform.py b/borgweb/borg/forms/archiveform.py new file mode 100644 index 0000000..b1a0b82 --- /dev/null +++ b/borgweb/borg/forms/archiveform.py @@ -0,0 +1,20 @@ +from django import forms + + +class ArchiveForm(forms.Form): + label = forms.CharField(label='Label') + fingerprint = forms.CharField(label='Fingerprint') + name = forms.CharField(label='Name') + start = forms.DateTimeField(label='Start', input_formats=["%Y-%m-%dT%H:%M:%S.%z"]) + end = forms.DateTimeField(label='End', input_formats=["%Y-%m-%dT%H:%M:%S.%z"]) + file_count = forms.IntegerField(label='File Count', min_value=0) + original_size = forms.IntegerField(label='Original Size', min_value=0) + compressed_size = forms.IntegerField(label='Compressed Size', min_value=0) + deduplicated_size = forms.IntegerField(label='Deduplicated Size', min_value=0) + + total_chunks = forms.IntegerField(label='Total Chunks', min_value=0) + total_csize = forms.IntegerField(label='Total Compressed Size', min_value=0) + total_size = forms.IntegerField(label='Total Size', min_value=0) + total_unique_chunks = forms.IntegerField(label='Total Unique Chunks', min_value=0) + unique_csize = forms.IntegerField(label='Unique Size', min_value=0) + unique_size = forms.IntegerField(label='Unique Compressed Size', min_value=0) diff --git a/borgweb/borg/templates/borg/archive.html b/borgweb/borg/templates/borg/archive.html new file mode 100644 index 0000000..9708842 --- /dev/null +++ b/borgweb/borg/templates/borg/archive.html @@ -0,0 +1,14 @@ + + + + + Add archive + + +
+ {% csrf_token %} + {{ form }} + +
+ + \ No newline at end of file diff --git a/borgweb/borg/urls.py b/borgweb/borg/urls.py index 854c43e..d6a7476 100644 --- a/borgweb/borg/urls.py +++ b/borgweb/borg/urls.py @@ -4,5 +4,6 @@ from . import views urlpatterns = [ path('', views.index, name='index'), - path('repo', views.get_repo, name='repo') + path('repo', views.get_repo, name='repo'), + path('archive', views.get_archive, name='archive'), ] diff --git a/borgweb/borg/views.py b/borgweb/borg/views.py index 906f42e..9aa4507 100644 --- a/borgweb/borg/views.py +++ b/borgweb/borg/views.py @@ -1,9 +1,9 @@ -from django.shortcuts import render -from django.http import HttpResponse, HttpResponseRedirect, HttpResponseNotAllowed +from django.shortcuts import render, get_object_or_404 +from django.http import HttpResponseRedirect -from .models import Repo, Label +from .models import Repo, Label, Archive, Cache from django.urls import reverse -from .forms import RepoForm +from .forms import RepoForm, ArchiveForm def index(request): @@ -42,3 +42,30 @@ def get_repo(request): form = RepoForm() return render(request, 'borg/repo.html', {'form': form}) + + +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})