• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

rdmorganiser / rdmo / 20164756478

12 Dec 2025 11:04AM UTC coverage: 94.814% (+0.02%) from 94.796%
20164756478

Pull #1427

github

web-flow
Merge 0c7b64b9d into 79917de8d
Pull Request #1427: RDMO 2.4.0 🎆

2124 of 2229 branches covered (95.29%)

22688 of 23929 relevant lines covered (94.81%)

3.79 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

98.11
rdmo/projects/views/project_create.py
1
import logging
4✔
2

3
from django.conf import settings
4✔
4
from django.contrib.auth.mixins import LoginRequiredMixin
4✔
5
from django.contrib.sites.shortcuts import get_current_site
4✔
6
from django.urls import reverse_lazy
4✔
7
from django.views.generic import CreateView, TemplateView
4✔
8

9
from rdmo.core.views import ObjectPermissionMixin, RedirectViewMixin
4✔
10
from rdmo.questions.models import Catalog
4✔
11
from rdmo.tasks.models import Task
4✔
12
from rdmo.views.models import View
4✔
13

14
from ..forms import ProjectForm
4✔
15
from ..mixins import ProjectImportMixin
4✔
16
from ..models import Membership, Project
4✔
17
from ..utils import filter_tasks_or_views_for_project
4✔
18

19
logger = logging.getLogger(__name__)
4✔
20

21

22
class ProjectCreateView(ObjectPermissionMixin, LoginRequiredMixin,
4✔
23
                        RedirectViewMixin, CreateView):
24
    model = Project
4✔
25
    form_class = ProjectForm
4✔
26
    permission_required = 'projects.add_project'
4✔
27

28
    def get_form_kwargs(self):
4✔
29
        catalogs = Catalog.objects.filter_for_user(self.request.user)
4✔
30
        projects = Project.objects.filter_user(self.request.user)
4✔
31

32
        form_kwargs = super().get_form_kwargs()
4✔
33
        form_kwargs.update({
4✔
34
            'catalogs': catalogs,
35
            'projects': projects
36
        })
37
        return form_kwargs
4✔
38

39
    def form_valid(self, form):
4✔
40
        # add current site
41
        form.instance.site = get_current_site(self.request)
4✔
42

43
        # save the project
44
        response = super().form_valid(form)
4✔
45

46
        # add current user as owner
47
        membership = Membership(project=form.instance, user=self.request.user, role='owner')
4✔
48
        membership.save()
4✔
49

50
        # add all tasks to project
51
        if not settings.PROJECT_TASKS_SYNC:
4✔
52
            tasks = filter_tasks_or_views_for_project(Task, form.instance).filter_availability(self.request.user)
4✔
53
            for task in tasks:
4✔
54
                form.instance.tasks.add(task)
4✔
55

56
        # add all views to project
57
        if not settings.PROJECT_VIEWS_SYNC:
4✔
58
            views = filter_tasks_or_views_for_project(View, form.instance).filter_availability(self.request.user)
4✔
59
            for view in views:
4✔
60
                form.instance.views.add(view)
4✔
61

62
        return response
4✔
63

64

65
class ProjectCreateImportView(ObjectPermissionMixin, LoginRequiredMixin,
4✔
66
                              ProjectImportMixin, TemplateView):
67
    success_url = reverse_lazy('projects')
4✔
68
    permission_required = 'projects.add_project'
4✔
69

70
    def get(self, request, *args, **kwargs):
4✔
71
        self.object = None
4✔
72

73
        if kwargs.get('format') is None:
4✔
74
            return self.import_form()
4✔
75
        else:
76
            return self.get_import_plugin(self.kwargs.get('format'), self.object).render()
×
77

78
    def post(self, request, *args, **kwargs):
4✔
79
        self.object = None
4✔
80

81
        method = request.POST.get('method')
4✔
82
        if method in ['upload_file', 'import_file']:
4✔
83
            return getattr(self, method)()
4✔
84
        else:
85
            return self.get_import_plugin(self.kwargs.get('format'), self.object).submit()
4✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc