1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

csv parse using python csv library

This commit is contained in:
Alyssa Bigley
2021-06-02 10:12:26 -04:00
parent 0c9376039c
commit 2bc68707b5

View File

@ -1,5 +1,6 @@
import logging
import re
import csv
from copy import deepcopy
from django.contrib import messages
@ -7,7 +8,7 @@ from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import FieldDoesNotExist, ObjectDoesNotExist, ValidationError
from django.db import transaction, IntegrityError
from django.db.models import ManyToManyField, ProtectedError
from django.forms import Form, ModelMultipleChoiceField, MultipleHiddenInput, Textarea, FileField, CharField
from django.forms import Form, ModelMultipleChoiceField, MultipleHiddenInput, Textarea, FileField
from django.http import HttpResponse
from django.shortcuts import get_object_or_404, redirect, render
from django.utils.html import escape
@ -668,7 +669,6 @@ class BulkImportView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View):
Upload_CSV = FileField(
required=False
)
# this is where the import form is created -- add csv upload here or create new form?
return ImportForm(*args, **kwargs)
def _save_obj(self, obj_form, request):
@ -693,7 +693,6 @@ class BulkImportView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View):
logger = logging.getLogger('netbox.views.BulkImportView')
new_objs = []
form = self._import_form(request.POST)
# this is where the csv data is handled
if form.is_valid():
logger.debug("Form validation was successful")
@ -701,33 +700,27 @@ class BulkImportView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View):
try:
# Iterate through CSV data and bind each row to a new model form instance.
with transaction.atomic():
if len(request.FILES) != 0:
csv_file = request.FILES["Upload_CSV"]
csv_file.seek(0)
csv_str = csv_file.read().decode('utf-8')
csv_list = csv_str.split('\n')
header_row = csv_list[0]
csv_list.pop(0)
header_list = header_row.split(',')
reader = csv.reader(csv_str.splitlines())
headers_list = next(reader)
headers = {}
for elt in header_list:
headers[elt] = None
for header in headers_list:
headers[header] = None
records = []
for row in csv_list:
if row != "":
row_str = (',').join(row)
row_list = row.split(',')
row_dict = {}
for i, elt in enumerate(row_list):
if elt == '':
row_dict[header_list[i]] = None
else:
row_dict[header_list[i]] = elt
records.append(row_dict)
for row in reader:
row_dict = {}
for i, elt in enumerate(row):
if elt == '':
row_dict[headers_list[i]] = None
else:
row_dict[headers_list[i]] = elt
records.append(row_dict)
else:
headers, records = form.cleaned_data['csv']
print("headers:", headers, "records:", records)
for row, data in enumerate(records, start=1):
obj_form = self.model_form(data, headers=headers)
restrict_form_fields(obj_form, request.user)