From 30d9d39739cdc1d6cb386b9d512a1ee6a045274e Mon Sep 17 00:00:00 2001
From: Geert Kapteijns <ghkapteijns@gmail.com>
Date: Thu, 15 Dec 2016 23:08:12 +0100
Subject: [PATCH] Fix bug in theses/factories.py and start work on CreateView

A CreateView class based view should replace the current
request_thesislink function based view, since it saves
many lines of code and is less error prone and more easily readable.
---
 scipost/factories.py |  4 ++--
 theses/factories.py  |  1 +
 theses/views.py      | 10 ++++++++++
 3 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/scipost/factories.py b/scipost/factories.py
index 80a4c0458..c69b975f6 100644
--- a/scipost/factories.py
+++ b/scipost/factories.py
@@ -11,9 +11,9 @@ class ContributorFactory(factory.django.DjangoModelFactory):
         model = Contributor
 
     title = "MR"
-    user = factory.SubFactory(UserFactory, contributor=None)
+    user = factory.SubFactory('scipost.factories.UserFactory', contributor=None)
     status = 1
-    vetted_by = factory.SubFactory(ContributorFactory)
+    vetted_by = factory.SubFactory('scipost.factories.ContributorFactory', vetted_by=None)
 
 
 class UserFactory(factory.django.DjangoModelFactory):
diff --git a/theses/factories.py b/theses/factories.py
index 19489c3c1..1a12cd026 100644
--- a/theses/factories.py
+++ b/theses/factories.py
@@ -16,3 +16,4 @@ class ThesisLinkFactory(factory.django.DjangoModelFactory):
     institution = factory.Faker('company')
     defense_date = factory.Faker('date_time_this_century')
     abstract = factory.Faker('text')
+    domain = 'ET'
diff --git a/theses/views.py b/theses/views.py
index 7a2a2309d..1c008ab15 100644
--- a/theses/views.py
+++ b/theses/views.py
@@ -1,4 +1,5 @@
 import datetime
+
 from django.utils import timezone
 from django.shortcuts import get_object_or_404, render
 from django.contrib.auth import authenticate, login, logout
@@ -9,6 +10,8 @@ from django.core.urlresolvers import reverse
 from django.http import HttpResponse, HttpResponseRedirect
 from django.views.decorators.csrf import csrf_protect
 from django.db.models import Avg
+from django.views.generic.edit import CreateView
+from django.utils.decorators import method_decorator
 
 from .models import *
 from .forms import *
@@ -25,6 +28,13 @@ title_dict = dict(TITLE_CHOICES)  # Convert titles for use in emails
 ################
 
 
+@method_decorator(permission_required(
+    'scipost.can_request_thesislinks', raise_exception=True), name='dispatch')
+class RequestThesisLink(CreateView):
+    model = ThesisLink
+    template_name = 'theses/request_thesislink.html'
+
+
 @permission_required('scipost.can_request_thesislinks', raise_exception=True)
 def request_thesislink(request):
     if request.method == 'POST':
-- 
GitLab