1818from django .db import transaction
1919from django .shortcuts import render
2020from django_rq import get_queue
21- from utilities .views import BulkImportView , ObjectListView
21+ from utilities .views import BulkImportView , ObjectEditView , ObjectListView
2222
2323from netbox_onboarding .utils .credentials import Credentials
2424from .filters import OnboardingTaskFilter
25- from .forms import OnboardingTaskFilterForm , OnboardingTaskFeedCSVForm
25+ from .forms import OnboardingTaskForm , OnboardingTaskFilterForm , OnboardingTaskFeedCSVForm
2626from .models import OnboardingTask
2727from .tables import OnboardingTaskTable , OnboardingTaskFeedBulkTable
2828
@@ -41,6 +41,43 @@ class OnboardingTaskListView(PermissionRequiredMixin, ObjectListView):
4141 template_name = "netbox_onboarding/onboarding_tasks_list.html"
4242
4343
44+ def handle_created_onboarding_task (task , owner ):
45+ """Sanitize the OnboardingTask and hand it off to the worker queue."""
46+ credentials = Credentials (username = task .username , password = task .password , secret = task .secret )
47+
48+ task .username = ""
49+ task .password = ""
50+ task .secret = ""
51+ task .owner = owner
52+ task .save ()
53+
54+ get_queue ("default" ).enqueue ("netbox_onboarding.worker.onboard_device" , task .pk , credentials )
55+
56+
57+ class OnboardingTaskCreateView (PermissionRequiredMixin , ObjectEditView ):
58+ """View for creating a new OnboardingTask."""
59+
60+ permission_required = "dcim.add_device"
61+ model = OnboardingTask
62+ queryset = OnboardingTask .objects .all ()
63+ model_form = OnboardingTaskForm
64+ template_name = "netbox_onboarding/onboarding_task_edit.html"
65+ default_return_url = "plugins:netbox_onboarding:onboarding_task_list"
66+
67+ def post (self , request ):
68+ """Process an HTTP POST request."""
69+ form = self .model_form (request .POST )
70+
71+ if form .is_valid ():
72+ obj = form .save ()
73+ handle_created_onboarding_task (obj , self .request .user )
74+
75+ return render (
76+ request ,
77+ self .template_name ,
78+ {"form" : form }
79+ )
80+
4481class OnboardingTaskFeedBulkImportView (PermissionRequiredMixin , BulkImportView ):
4582 """View for bulk-importing a CSV file to create OnboardingTasks."""
4683
@@ -70,15 +107,7 @@ def post(self, request):
70107 raise ValidationError ("" )
71108
72109 for ot in new_objs :
73- credentials = Credentials (username = ot .username , password = ot .password , secret = ot .secret ,)
74-
75- ot .username = ""
76- ot .password = ""
77- ot .secret = ""
78- ot .owner = self .request .user
79- ot .save ()
80-
81- get_queue ("default" ).enqueue ("netbox_onboarding.worker.onboard_device" , ot .pk , credentials )
110+ handle_created_onboarding_task (ot , self .request .user )
82111
83112 if new_objs :
84113 msg = "Imported {} {}" .format (len (new_objs ), new_objs [0 ]._meta .verbose_name_plural )
0 commit comments