1212limitations under the License.
1313"""
1414import logging
15- from django .contrib import messages
1615from django .contrib .auth .mixins import PermissionRequiredMixin
17- from django .core .exceptions import ValidationError
18- from django .db import transaction
19- from django .shortcuts import render
20- from django_rq import get_queue
21- from utilities .views import BulkImportView , ObjectListView
16+ from utilities .views import BulkImportView , ObjectEditView , ObjectListView
2217
23- from netbox_onboarding .utils .credentials import Credentials
2418from .filters import OnboardingTaskFilter
25- from .forms import OnboardingTaskFilterForm , OnboardingTaskFeedCSVForm
19+ from .forms import OnboardingTaskForm , OnboardingTaskFilterForm , OnboardingTaskFeedCSVForm
2620from .models import OnboardingTask
2721from .tables import OnboardingTaskTable , OnboardingTaskFeedBulkTable
2822
@@ -35,71 +29,27 @@ class OnboardingTaskListView(PermissionRequiredMixin, ObjectListView):
3529
3630 permission_required = "dcim.view_device"
3731 queryset = OnboardingTask .objects .all ().order_by ("-id" )
38- filter = OnboardingTaskFilter
39- filter_form = OnboardingTaskFilterForm
32+ filterset = OnboardingTaskFilter
33+ filterset_form = OnboardingTaskFilterForm
4034 table = OnboardingTaskTable
4135 template_name = "netbox_onboarding/onboarding_tasks_list.html"
4236
4337
38+ class OnboardingTaskCreateView (PermissionRequiredMixin , ObjectEditView ):
39+ """View for creating a new OnboardingTask."""
40+
41+ permission_required = "dcim.add_device"
42+ model = OnboardingTask
43+ queryset = OnboardingTask .objects .all ()
44+ model_form = OnboardingTaskForm
45+ template_name = "netbox_onboarding/onboarding_task_edit.html"
46+ default_return_url = "plugins:netbox_onboarding:onboarding_task_list"
47+
48+
4449class OnboardingTaskFeedBulkImportView (PermissionRequiredMixin , BulkImportView ):
4550 """View for bulk-importing a CSV file to create OnboardingTasks."""
4651
4752 permission_required = "dcim.add_device"
4853 model_form = OnboardingTaskFeedCSVForm
4954 table = OnboardingTaskFeedBulkTable
5055 default_return_url = "plugins:netbox_onboarding:onboarding_task_list"
51-
52- def post (self , request ):
53- """Process an HTTP POST request."""
54- new_objs = []
55- form = self ._import_form (request .POST )
56-
57- if form .is_valid ():
58- try :
59- # Iterate through CSV data and bind each row to a new model form instance.
60- with transaction .atomic ():
61- headers , records = form .cleaned_data ["csv" ]
62- for row , data in enumerate (records , start = 1 ):
63- obj_form = self .model_form (data , headers = headers )
64- if obj_form .is_valid ():
65- obj = self ._save_obj (obj_form , request )
66- new_objs .append (obj )
67- else :
68- for field , err in obj_form .errors .items ():
69- form .add_error ("csv" , "Row {} {}: {}" .format (row , field , err [0 ]))
70- raise ValidationError ("" )
71-
72- 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 )
82-
83- if new_objs :
84- msg = "Imported {} {}" .format (len (new_objs ), new_objs [0 ]._meta .verbose_name_plural )
85- messages .success (request , msg )
86-
87- return render (
88- request ,
89- "import_success.html" ,
90- {"table" : self .table (new_objs ), "return_url" : self .get_return_url (request ),},
91- )
92-
93- except ValidationError :
94- pass
95-
96- return render (
97- request ,
98- self .template_name ,
99- {
100- "form" : form ,
101- "fields" : self .model_form ().fields ,
102- "obj_type" : self .model_form ._meta .model ._meta .verbose_name , # pylint:disable=no-member
103- "return_url" : self .get_return_url (request ),
104- },
105- )
0 commit comments