From 1ddd7415cbf4fc5b17b25dda7b96e5e2d7d81dea Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 5 Jun 2017 16:16:23 -0400 Subject: [PATCH] Replaced old CSVDataField --- netbox/secrets/forms.py | 2 +- netbox/utilities/forms.py | 43 +-------------------------------------- netbox/utilities/views.py | 4 ++-- 3 files changed, 4 insertions(+), 45 deletions(-) diff --git a/netbox/secrets/forms.py b/netbox/secrets/forms.py index 806c9d50c..4a2a75abf 100644 --- a/netbox/secrets/forms.py +++ b/netbox/secrets/forms.py @@ -7,7 +7,7 @@ from django import forms from django.db.models import Count from dcim.models import Device -from utilities.forms import BootstrapMixin, BulkEditForm, CSVDataField2, FilterChoiceField, SlugField +from utilities.forms import BootstrapMixin, BulkEditForm, CSVDataField, FilterChoiceField, SlugField from .models import Secret, SecretRole, UserKey diff --git a/netbox/utilities/forms.py b/netbox/utilities/forms.py index 56b7c24b7..25a2d92df 100644 --- a/netbox/utilities/forms.py +++ b/netbox/utilities/forms.py @@ -216,47 +216,6 @@ class Livesearch(forms.TextInput): # class CSVDataField(forms.CharField): - """ - A field for comma-separated values (CSV). Values containing commas should be encased within double quotes. Example: - '"New York, NY",new-york-ny,Other stuff' => ['New York, NY', 'new-york-ny', 'Other stuff'] - """ - csv_form = None - widget = forms.Textarea - - def __init__(self, csv_form, *args, **kwargs): - self.csv_form = csv_form - self.columns = self.csv_form().fields.keys() - super(CSVDataField, self).__init__(*args, **kwargs) - self.strip = False - if not self.label: - self.label = 'CSV Data' - if not self.help_text: - self.help_text = 'Enter one line per record in CSV format.' - - def to_python(self, value): - """ - Return a list of dictionaries, each representing an individual record - """ - # Python 2's csv module has problems with Unicode - if not isinstance(value, str): - value = value.encode('utf-8') - records = [] - reader = csv.reader(value.splitlines()) - for i, row in enumerate(reader, start=1): - if row: - if len(row) < len(self.columns): - raise forms.ValidationError("Line {}: Field(s) missing (found {}; expected {})" - .format(i, len(row), len(self.columns))) - elif len(row) > len(self.columns): - raise forms.ValidationError("Line {}: Too many fields (found {}; expected {})" - .format(i, len(row), len(self.columns))) - row = [col.strip() for col in row] - record = dict(zip(self.columns, row)) - records.append(record) - return records - - -class CSVDataField2(forms.CharField): """ A CharField (rendered as a Textarea) which accepts CSV-formatted data. It returns a list of dictionaries mapping column headers to values. Each dictionary represents an individual record. @@ -268,7 +227,7 @@ class CSVDataField2(forms.CharField): self.fields = fields self.required_fields = required_fields - super(CSVDataField2, self).__init__(*args, **kwargs) + super(CSVDataField, self).__init__(*args, **kwargs) self.strip = False if not self.label: diff --git a/netbox/utilities/views.py b/netbox/utilities/views.py index 8220b3fb3..7e95469f1 100644 --- a/netbox/utilities/views.py +++ b/netbox/utilities/views.py @@ -20,7 +20,7 @@ from django.utils.safestring import mark_safe from django.views.generic import View from extras.models import CustomField, CustomFieldValue, ExportTemplate, UserAction -from utilities.forms import BootstrapMixin, CSVDataField2 +from utilities.forms import BootstrapMixin, CSVDataField from .error_handlers import handle_protectederror from .forms import ConfirmationForm from .paginator import EnhancedPaginator @@ -389,7 +389,7 @@ class BulkImportView(View): required_fields = [name for name, field in self.model_form().fields.items() if field.required] class ImportForm(BootstrapMixin, Form): - csv = CSVDataField2(fields=fields, required_fields=required_fields) + csv = CSVDataField(fields=fields, required_fields=required_fields) return ImportForm(*args, **kwargs)