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

rdmorganiser / rdmo / 14404330126

11 Apr 2025 01:31PM UTC coverage: 90.789% (+0.3%) from 90.478%
14404330126

push

github

web-flow
Merge pull request #1195 from rdmorganiser/2.3.0

RDMO 2.3.0 ⭐

989 of 1076 branches covered (91.91%)

9176 of 10107 relevant lines covered (90.79%)

3.63 hits per line

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

98.08
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

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

20

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

27
    def get_form_kwargs(self):
4✔
28
        catalogs = Catalog.objects.filter_current_site() \
4✔
29
                                  .filter_group(self.request.user) \
30
                                  .filter_availability(self.request.user) \
31
                                  .order_by('-available', 'order')
32
        projects = Project.objects.filter_user(self.request.user)
4✔
33

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

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

45
        # save the project
46
        response = super().form_valid(form)
4✔
47

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

52
        # add all tasks to project
53
        if not settings.PROJECT_TASKS_SYNC:
4✔
54
            tasks = Task.objects.filter_for_project(form.instance).filter_availability(self.request.user)
4✔
55
            for task in tasks:
4✔
56
                form.instance.tasks.add(task)
4✔
57

58
        # add all views to project
59
        if not settings.PROJECT_VIEWS_SYNC:
4✔
60
            views = View.objects.filter_for_project(form.instance).filter_availability(self.request.user)
4✔
61
            for view in views:
4✔
62
                form.instance.views.add(view)
4✔
63

64
        return response
4✔
65

66

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

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

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

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

83
        method = request.POST.get('method')
4✔
84
        if method in ['upload_file', 'import_file']:
4✔
85
            return getattr(self, method)()
4✔
86
        else:
87
            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