Started migrating to python3

This commit is contained in:
Sebastian 2023-07-12 19:44:08 +02:00
parent 6439a0d974
commit 58e4dbc484
12 changed files with 428 additions and 415 deletions

3
.style.yapf Normal file
View File

@ -0,0 +1,3 @@
[style]
based_on_style = pep8
column_limit=100

View File

@ -1,7 +1,8 @@
# Django settings for past3d project. # Django settings for past3d project.
from django.core.urlresolvers import reverse_lazy from django.urls import reverse_lazy
import os import os
BASE_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), '../') BASE_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), '../')
DEBUG = True DEBUG = True
@ -15,12 +16,14 @@ MANAGERS = ADMINS
DATABASES = { DATABASES = {
'default': { 'default': {
'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 'ENGINE':
'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': os.path.join(BASE_DIR, "data.sqlite"), # Or path to database file if using sqlite3. 'NAME': os.path.join(BASE_DIR, "data.sqlite"), # Or path to database file if using sqlite3.
# The following settings are not used with sqlite3: # The following settings are not used with sqlite3:
'USER': '', 'USER': '',
'PASSWORD': '', 'PASSWORD': '',
'HOST': '', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP. 'HOST':
'', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
'PORT': '', # Set to empty string for default. 'PORT': '', # Set to empty string for default.
} }
} }

View File

@ -1,31 +1,19 @@
from django.conf.urls import patterns, include, url from django.urls import include, re_path, path
from django.conf import settings from django.conf import settings
from django.conf.urls.static import static from django.conf.urls.static import static
# Uncomment the next two lines to enable the admin: # Uncomment the next two lines to enable the admin:
from django.contrib import admin from django.contrib import admin
admin.autodiscover() admin.autodiscover()
from views import HomeView from past3d.views import HomeView
urlpatterns = patterns('', urlpatterns = [
# Examples: re_path(r'^$', HomeView.as_view(), name='home'),
# url(r'^$', 'past3d.views.home', name='home'), path('users/', include('users.urls')),
# url(r'^past3d/', include('past3d.foo.urls')), path('3d/', include('pastebin.urls')),
path('admin/', admin.site.urls),
url(r'^$', HomeView.as_view(), name='home'), ]
url(r'^users/', include('users.urls')),
url(r'^3d/', include('pastebin.urls')),
# Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
url(r'^admin/', include(admin.site.urls)),
)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

View File

@ -2,9 +2,11 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.contrib import admin from django.contrib import admin
from models import Geometry from pastebin.models import Geometry
class GeometryAdmin(admin.ModelAdmin): class GeometryAdmin(admin.ModelAdmin):
list_display = ['name', 'description', 'date', 'file', 'sourcefile'] list_display = ['name', 'description', 'date', 'file', 'sourcefile']
admin.site.register(Geometry, GeometryAdmin) admin.site.register(Geometry, GeometryAdmin)

View File

@ -5,7 +5,7 @@ import struct
from django.forms import ModelForm from django.forms import ModelForm
from django import forms from django import forms
from models import Geometry from pastebin.models import Geometry
facet_pattern = re.compile(r'facet normal\s+[0-9.e+-]+\s+[0-9.e+-]+\s+[0-9.e+-]+') facet_pattern = re.compile(r'facet normal\s+[0-9.e+-]+\s+[0-9.e+-]+\s+[0-9.e+-]+')
loop_pattern = re.compile(r'outer\s+loop') loop_pattern = re.compile(r'outer\s+loop')
@ -14,7 +14,9 @@ endloop_pattern = re.compile(r'endloop')
endfacet_pattern = re.compile(r'endfacet') endfacet_pattern = re.compile(r'endfacet')
endsolid_pattern = re.compile(r'endsolid .*') endsolid_pattern = re.compile(r'endsolid .*')
class STLUploadForm(ModelForm): class STLUploadForm(ModelForm):
def clean_file(self): def clean_file(self):
stlfile = self.cleaned_data.get("file") stlfile = self.cleaned_data.get("file")
@ -74,6 +76,7 @@ class STLUploadForm(ModelForm):
class GeometryForm(STLUploadForm): class GeometryForm(STLUploadForm):
class Meta: class Meta:
model = Geometry model = Geometry
fields = ['name', 'description', 'public', 'expiration', 'file', 'sourcefile'] fields = ['name', 'description', 'public', 'expiration', 'file', 'sourcefile']
@ -81,7 +84,7 @@ class GeometryForm(STLUploadForm):
class AnonymousGeometryForm(STLUploadForm): class AnonymousGeometryForm(STLUploadForm):
expiration = forms.ChoiceField(choices=Geometry.EXPIRATION_CHOICES[:-1]) expiration = forms.ChoiceField(choices=Geometry.EXPIRATION_CHOICES[:-1])
class Meta: class Meta:
model = Geometry model = Geometry
fields = ['name', 'description', 'public', 'expiration', 'file'] fields = ['name', 'description', 'public', 'expiration', 'file']

View File

@ -5,12 +5,13 @@ import re
from hashlib import md5 from hashlib import md5
from datetime import datetime, timedelta from datetime import datetime, timedelta
from django.core.urlresolvers import reverse from django.urls import reverse
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.db import models from django.db import models
vertex_pattern = re.compile(r'vertex\s+([0-9.e+-]+)\s+([0-9.e+-]+)\s+([0-9.e+-]+)') vertex_pattern = re.compile(r'vertex\s+([0-9.e+-]+)\s+([0-9.e+-]+)\s+([0-9.e+-]+)')
def safe_upload_path(base_dir): def safe_upload_path(base_dir):
def generate_path(instance, filename): def generate_path(instance, filename):
@ -18,9 +19,7 @@ def safe_upload_path(base_dir):
ext = os.path.splitext(filename)[1] ext = os.path.splitext(filename)[1]
md5sum = md5() md5sum = md5()
md5sum.update(instance.name md5sum.update(instance.name + str(datetime.now()) + filename)
+ str(datetime.now())
+ filename)
randomname = md5sum.hexdigest() randomname = md5sum.hexdigest()
return os.path.join(base_dir, '%s%s' % (randomname, ext)) return os.path.join(base_dir, '%s%s' % (randomname, ext))
@ -28,7 +27,6 @@ def safe_upload_path(base_dir):
return generate_path return generate_path
class Geometry(models.Model): class Geometry(models.Model):
HOUR = 0 HOUR = 0
@ -37,20 +35,19 @@ class Geometry(models.Model):
MONTH = 3 MONTH = 3
FORERVER = 4 FORERVER = 4
EXPIRATION_CHOICES = ((HOUR, 'one hour'), EXPIRATION_CHOICES = ((HOUR, 'one hour'), (DAY, 'one day'), (WEEK, 'one week'),
(DAY, 'one day'), (MONTH, 'one month'), (FORERVER, 'forever'))
(WEEK, 'one week'),
(MONTH, 'one month'),
(FORERVER, 'forever'))
DELTAS = { HOUR : timedelta(hours = 1), DELTAS = {
HOUR: timedelta(hours=1),
DAY: timedelta(days=1), DAY: timedelta(days=1),
WEEK: timedelta(weeks=1), WEEK: timedelta(weeks=1),
MONTH : timedelta(weeks = 4)} MONTH: timedelta(weeks=4)
}
name = models.CharField(max_length=128) name = models.CharField(max_length=128)
description = models.TextField(blank=True) description = models.TextField(blank=True)
user = models.ForeignKey(User, blank=True, null=True) user = models.ForeignKey(User, blank=True, null=True, on_delete=models.CASCADE)
date = models.DateTimeField(auto_now_add=True) date = models.DateTimeField(auto_now_add=True)
expiration = models.IntegerField(default=0, choices=EXPIRATION_CHOICES) expiration = models.IntegerField(default=0, choices=EXPIRATION_CHOICES)
public = models.BooleanField(default=True) public = models.BooleanField(default=True)
@ -75,9 +72,8 @@ class Geometry(models.Model):
return None return None
def _generate_meta_infos(self): def _generate_meta_infos(self):
print "Generating metainfos %s" % self.name print("Generating metainfos %s" % self.name)
self.file.open() self.file.open()
@ -86,7 +82,7 @@ class Geometry(models.Model):
max_coord = [None, None, None] max_coord = [None, None, None]
if self.file.read(5) != "solid": if self.file.read(5) != "solid":
print "binary" print("binary")
# Skip header # Skip header
self.file.seek(80) self.file.seek(80)
count = struct.unpack("i", self.file.read(4))[0] count = struct.unpack("i", self.file.read(4))[0]
@ -101,12 +97,12 @@ class Geometry(models.Model):
for i in range(0, 3): for i in range(0, 3):
x = struct.unpack("<f", self.file.read(4))[0] x = struct.unpack("<f", self.file.read(4))[0]
if min_coord[i] != None : if min_coord[i] is not None:
min_coord[i] = min(min_coord[i], x) min_coord[i] = min(min_coord[i], x)
else: else:
min_coord[i] = x min_coord[i] = x
if max_coord[i] != None : if max_coord[i] is not None:
max_coord[i] = max(max_coord[i], x) max_coord[i] = max(max_coord[i], x)
else: else:
max_coord[i] = x max_coord[i] = x
@ -114,7 +110,7 @@ class Geometry(models.Model):
self.file.seek(self.file.tell() + 2) self.file.seek(self.file.tell() + 2)
else: else:
print "ascii" print("ascii")
line = self.file.readline() line = self.file.readline()
while line != "": while line != "":
@ -122,16 +118,16 @@ class Geometry(models.Model):
if line.startswith("facet"): if line.startswith("facet"):
count = count + 1 count = count + 1
if line.startswith("vertex"): if line.startswith("vertex"):
coords = vertex_pattern.match(line).groups(); coords = vertex_pattern.match(line).groups()
for i in range(0, 3): for i in range(0, 3):
x = float(coords[i]) x = float(coords[i])
if min_coord[i] != None : if min_coord[i] is not None:
min_coord[i] = min(min_coord[i], x) min_coord[i] = min(min_coord[i], x)
else: else:
min_coord[i] = x min_coord[i] = x
if max_coord[i] != None : if max_coord[i] is not None:
max_coord[i] = max(max_coord[i], x) max_coord[i] = max(max_coord[i], x)
else: else:
max_coord[i] = x max_coord[i] = x

View File

@ -1,11 +1,11 @@
from django.conf.urls import patterns, include, url from django.urls import re_path
from views import GeometryView, GeometryListView, GeometryCreate, GeometryDelete from pastebin.views import GeometryView, GeometryListView, GeometryCreate, GeometryDelete
urlpatterns = patterns('',
url(r'^new/$', GeometryCreate.as_view(), name='geometry_create'),
url(r'^list/$', GeometryListView.as_view(), name='geometry_list'),
url(r'^list/page/(?P<page>[0-9]+)/$', GeometryListView.as_view(), name='geometry_list'),
url(r'^delete/(?P<id>\d+)/$', GeometryDelete.as_view(), name='geometry_delete'),
url(r'^(?P<id>\d+)/$', GeometryView.as_view(), name='geometry_details'))
urlpatterns = [
re_path(r'^new/$', GeometryCreate.as_view(), name='geometry_create'),
re_path(r'^list/$', GeometryListView.as_view(), name='geometry_list'),
re_path(r'^list/page/(?P<page>[0-9]+)/$', GeometryListView.as_view(), name='geometry_list'),
re_path(r'^delete/(?P<id>\d+)/$', GeometryDelete.as_view(), name='geometry_delete'),
re_path(r'^(?P<id>\d+)/$', GeometryView.as_view(), name='geometry_details')
]

View File

@ -1,21 +1,23 @@
from django.views.generic.edit import CreateView, DeleteView from django.views.generic.edit import CreateView, DeleteView
from django.views.generic.detail import DetailView from django.views.generic.detail import DetailView
from django.core.urlresolvers import reverse from django.urls import reverse
from django.views.generic.base import ContextMixin from django.views.generic.base import ContextMixin
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.views.generic.base import TemplateView from django.views.generic.base import TemplateView
from django.views.generic.list import ListView from django.views.generic.list import ListView
from forms import GeometryForm, AnonymousGeometryForm from pastebin.forms import GeometryForm, AnonymousGeometryForm
from models import Geometry from pastebin.models import Geometry
class LastesGeometriesMixin(ContextMixin): class LastesGeometriesMixin(ContextMixin):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(LastesGeometriesMixin, self).get_context_data(**kwargs) context = super(LastesGeometriesMixin, self).get_context_data(**kwargs)
context['latest_geometries'] = Geometry.get_latest() context['latest_geometries'] = Geometry.get_latest()
return context return context
class GeometryListView(ListView, LastesGeometriesMixin): class GeometryListView(ListView, LastesGeometriesMixin):
queryset = Geometry.objects.all().filter(public=True).order_by('date') queryset = Geometry.objects.all().filter(public=True).order_by('date')
paginate_by = 50 paginate_by = 50
@ -54,6 +56,7 @@ class GeometryCreate(CreateView, LastesGeometriesMixin):
return res return res
class GeometryDelete(DeleteView, LastesGeometriesMixin): class GeometryDelete(DeleteView, LastesGeometriesMixin):
model = Geometry model = Geometry
pk_url_kwarg = 'id' pk_url_kwarg = 'id'

View File

@ -1,5 +1,6 @@
Django==1.5.4 asgiref==3.7.2
Werkzeug==0.9.4 Django==4.2.3
django-extensions==1.2.2 django-extensions==3.2.3
six==1.4.1 MarkupSafe==2.1.3
wsgiref==0.1.2 sqlparse==0.4.4
Werkzeug==2.3.6

View File

@ -2,6 +2,7 @@ from django import forms
from django.forms import ModelForm from django.forms import ModelForm
from django.contrib.auth.models import User from django.contrib.auth.models import User
class UserCreateForm(ModelForm): class UserCreateForm(ModelForm):
password1 = forms.CharField(label='Password', widget=forms.PasswordInput) password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput) password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput)
@ -10,7 +11,6 @@ class UserCreateForm(ModelForm):
model = User model = User
fields = ['username', 'email'] fields = ['username', 'email']
def clean_password2(self): def clean_password2(self):
password1 = self.cleaned_data.get("password1") password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2") password2 = self.cleaned_data.get("password2")
@ -20,7 +20,6 @@ class UserCreateForm(ModelForm):
return password1 return password1
def clean_email(self): def clean_email(self):
# Make sure Email is unique # Make sure Email is unique
email = self.cleaned_data.get("email") email = self.cleaned_data.get("email")
@ -29,7 +28,6 @@ class UserCreateForm(ModelForm):
return email return email
def save(self, commit=True): def save(self, commit=True):
user = super(UserCreateForm, self).save(commit=False) user = super(UserCreateForm, self).save(commit=False)
user.set_password(self.cleaned_data["password1"]) user.set_password(self.cleaned_data["password1"])
@ -39,7 +37,6 @@ class UserCreateForm(ModelForm):
return user return user
class UserUpdateForm(ModelForm): class UserUpdateForm(ModelForm):
new_password1 = forms.CharField(label='New Password', new_password1 = forms.CharField(label='New Password',
widget=forms.PasswordInput, widget=forms.PasswordInput,
@ -53,7 +50,6 @@ class UserUpdateForm(ModelForm):
model = User model = User
fields = ['email'] fields = ['email']
def clean_current_password(self): def clean_current_password(self):
current_password = self.cleaned_data.get("current_password") current_password = self.cleaned_data.get("current_password")
@ -62,7 +58,6 @@ class UserUpdateForm(ModelForm):
return current_password return current_password
def clean_new_password2(self): def clean_new_password2(self):
password1 = self.cleaned_data.get("new_password1") password1 = self.cleaned_data.get("new_password1")
password2 = self.cleaned_data.get("new_password2") password2 = self.cleaned_data.get("new_password2")
@ -72,7 +67,6 @@ class UserUpdateForm(ModelForm):
return password1 return password1
def clean_email(self): def clean_email(self):
# Make sure Email is still unique # Make sure Email is still unique
email = self.cleaned_data.get("email") email = self.cleaned_data.get("email")
@ -81,7 +75,6 @@ class UserUpdateForm(ModelForm):
return email return email
def save(self, commit=True): def save(self, commit=True):
user = super(UserUpdateForm, self).save(commit=False) user = super(UserUpdateForm, self).save(commit=False)

View File

@ -1,37 +1,57 @@
from django.conf.urls import patterns, include, url from django.urls import re_path, path, reverse_lazy
from django.core.urlresolvers import reverse_lazy from django.contrib.auth import views as auth_views
from pastebin.models import Geometry from pastebin.models import Geometry
from views import * from users.views import *
urlpatterns = patterns('', urlpatterns = [
url(r'^signup/$', UserCreateView.as_view(), name='signup'), re_path(r'^signup/$', UserCreateView.as_view(), name='signup'),
url(r'^confirm/(?P<user_id>\d+)/$', SendConfirmationView.as_view(), name='send_confirmation'), re_path(r'^confirm/(?P<user_id>\d+)/$', SendConfirmationView.as_view(), name='send_confirmation'),
url(r'^confirm/(?P<user_id>\d+)/(?P<token>.+)/$', CheckConfirmationView.as_view(), name='check_confirmation'), re_path(r'^confirm/(?P<user_id>\d+)/(?P<token>.+)/$',
CheckConfirmationView.as_view(),
url(r'^update/(?P<user_id>\d+)/$', UserUpdateView.as_view(), name='user_update'), name='check_confirmation'),
re_path(r'^update/(?P<user_id>\d+)/$', UserUpdateView.as_view(), name='user_update'),
url(r'^password/reset/$', 'django.contrib.auth.views.password_reset', {'extra_context' : {'latest_geometries' : Geometry.get_latest()}, path('password/reset/',
auth_views.PasswordResetView.as_view(), {
'extra_context': {
'latest_geometries': Geometry.get_latest()
},
'template_name': 'users/password_reset.html', 'template_name': 'users/password_reset.html',
'post_reset_redirect' : reverse_lazy('password_reset_sent')}, 'post_reset_redirect': reverse_lazy('password_reset_sent')
},
name='password_reset'), name='password_reset'),
path('password/reset/confirm/',
url(r'^password/reset/(?P<uidb36>[0-9A-Za-z]+)/(?P<token>.+)/$', 'django.contrib.auth.views.password_reset_confirm', {'extra_context' : {'latest_geometries' : Geometry.get_latest()}, auth_views.PasswordResetConfirmView.as_view(), {
'extra_context': {
'latest_geometries': Geometry.get_latest()
},
'template_name': 'users/password_reset_confirm.html', 'template_name': 'users/password_reset_confirm.html',
'post_reset_redirect' : reverse_lazy('login')}, 'post_reset_redirect': reverse_lazy('login')
},
name='password_reset_confirm'), name='password_reset_confirm'),
path('password/reset/sent/',
url(r'^password/reset/sent/$', 'django.contrib.auth.views.password_reset_done', {'extra_context' : {'latest_geometries' : Geometry.get_latest()}, auth_views.PasswordResetDoneView.as_view(), {
'template_name' : 'users/password_reset_sent.html',}, 'extra_context': {
'latest_geometries': Geometry.get_latest()
},
'template_name': 'users/password_reset_sent.html',
},
name='password_reset_sent'), name='password_reset_sent'),
path('login/',
auth_views.LoginView.as_view(), {
url(r'^login/$', 'django.contrib.auth.views.login', {'extra_context' : {'latest_geometries' : Geometry.get_latest()}, 'extra_context': {
'template_name' : 'users/login.html'}, 'latest_geometries': Geometry.get_latest()
},
'template_name': 'users/login.html'
},
name='login'), name='login'),
path('logout/',
url(r'^logout/$', 'django.contrib.auth.views.logout',{'extra_context' : {'latest_geometries' : Geometry.get_latest()}, auth_views.LogoutView.as_view(), {
'next_page' : reverse_lazy('login')}, 'extra_context': {
'latest_geometries': Geometry.get_latest()
},
'next_page': reverse_lazy('login')
},
name='logout'), name='logout'),
) ]

View File

@ -1,8 +1,8 @@
from django.views.generic.edit import CreateView, UpdateView from django.views.generic.edit import CreateView, UpdateView
from django.views.generic.base import TemplateView from django.views.generic.base import TemplateView
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.urlresolvers import reverse from django.urls import reverse
from django.contrib.sites.models import get_current_site from django.contrib.sites.shortcuts import get_current_site
from django.contrib.auth.tokens import default_token_generator from django.contrib.auth.tokens import default_token_generator
from django.template import loader from django.template import loader
from django.utils.http import int_to_base36 from django.utils.http import int_to_base36
@ -11,14 +11,14 @@ from django.core.exceptions import PermissionDenied
from pastebin.views import LastesGeometriesMixin from pastebin.views import LastesGeometriesMixin
from forms import UserCreateForm, UserUpdateForm from users.forms import UserCreateForm, UserUpdateForm
class UserCreateView(CreateView, LastesGeometriesMixin): class UserCreateView(CreateView, LastesGeometriesMixin):
model = User model = User
form_class = UserCreateForm form_class = UserCreateForm
template_name = 'users/signup.html' template_name = 'users/signup.html'
def get_success_url(self): def get_success_url(self):
return reverse('send_confirmation', kwargs={'user_id': self.object.pk}) return reverse('send_confirmation', kwargs={'user_id': self.object.pk})
@ -36,7 +36,6 @@ class UserUpdateView(UpdateView, LastesGeometriesMixin):
return reverse('geometry_create') return reverse('geometry_create')
class SendConfirmationView(TemplateView, LastesGeometriesMixin): class SendConfirmationView(TemplateView, LastesGeometriesMixin):
template_name = 'users/send_confirmation.html' template_name = 'users/send_confirmation.html'
email_template_name = 'users/confirmation_email.txt' email_template_name = 'users/confirmation_email.txt'
@ -58,7 +57,11 @@ class SendConfirmationView(TemplateView, LastesGeometriesMixin):
site_name = get_current_site(self.request).name site_name = get_current_site(self.request).name
uid = int_to_base36(user.pk) uid = int_to_base36(user.pk)
token = default_token_generator.make_token(user) token = default_token_generator.make_token(user)
link = request.build_absolute_uri(reverse('check_confirmation', kwargs={'user_id' : user.pk, 'token' : token})) link = request.build_absolute_uri(
reverse('check_confirmation', kwargs={
'user_id': user.pk,
'token': token
}))
context = { context = {
'email': user.email, 'email': user.email,
@ -71,11 +74,9 @@ class SendConfirmationView(TemplateView, LastesGeometriesMixin):
email = loader.render_to_string(self.email_template_name, context) email = loader.render_to_string(self.email_template_name, context)
user.email_user(subject, email) user.email_user(subject, email)
return super(SendConfirmationView, self).get(self, request, *args, **kwargs) return super(SendConfirmationView, self).get(self, request, *args, **kwargs)
class CheckConfirmationView(TemplateView, LastesGeometriesMixin): class CheckConfirmationView(TemplateView, LastesGeometriesMixin):
template_name = 'users/check_confirmation.html' template_name = 'users/check_confirmation.html'
@ -99,6 +100,6 @@ class CheckConfirmationView(TemplateView, LastesGeometriesMixin):
user.is_active = True user.is_active = True
user.save() user.save()
print "Acitvating %s" % user.username print("Acitvating %s" % user.username)
return super(CheckConfirmationView, self).get(self, request, *args, **kwargs) return super(CheckConfirmationView, self).get(self, request, *args, **kwargs)